@camstack/addon-pipeline 1.1.60 → 1.1.62

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 (32) 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 +3 -3
  4. package/dist/detection-pipeline/index.mjs +3 -3
  5. package/dist/{dist-DynD1EC-.js → dist-DlMmkOsE.js} +389 -7
  6. package/dist/{dist-CcqqznPf.mjs → dist-LkwlodgP.mjs} +372 -8
  7. package/dist/{model-download-service-Cp9f4dk6-0wh7OK3s.mjs → model-download-service-Cp9f4dk6-CwUb5v3Y.mjs} +1 -1
  8. package/dist/{model-download-service-Cp9f4dk6-Cp_GTKTw.js → model-download-service-Cp9f4dk6-Dv-oFwjN.js} +12 -0
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/pipeline-runner/index.js +2 -2
  12. package/dist/pipeline-runner/index.mjs +2 -2
  13. package/dist/recorder/index.js +798 -30
  14. package/dist/recorder/index.mjs +799 -31
  15. package/dist/{step-definitions-DhhwklAL.js → step-definitions-CxwB0fEq.js} +85 -2
  16. package/dist/{step-definitions-CvwB_Otk.mjs → step-definitions-DxN9tmQP.mjs} +85 -2
  17. package/dist/stream-broker/_stub.js +2 -2
  18. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B07QYb7Q.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-3gAFmxjh.mjs} +3 -3
  19. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DHJB3xUN.mjs +26 -0
  20. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DSXctoaw.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-C4pcysOQ.mjs} +1 -1
  21. package/dist/stream-broker/{hostInit-C02YjaoP.mjs → hostInit-B1aDV0u0.mjs} +3 -3
  22. package/dist/stream-broker/index.js +29 -9
  23. package/dist/stream-broker/index.mjs +29 -9
  24. package/dist/stream-broker/remoteEntry.js +1 -1
  25. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-ColkZGA1.js → MaskShapeCanvas-DI4BY7W2-C7IhxQQ_.js} +1 -1
  26. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-BIzNJmu0.js → MotionZonesSettings-NcxxQN8r-DZXzBUU8.js} +1 -1
  27. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-BHuYOg7Q.js → PrivacyMaskSettings-APgPLF7p-Dz9ttl4A.js} +1 -1
  28. package/embed-dist/assets/index-DRsQUyLF.js +81 -0
  29. package/embed-dist/index.html +1 -1
  30. package/package.json +5 -1
  31. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DYQ6RHcb.mjs +0 -26
  32. package/embed-dist/assets/index-n1_ZSmy0.js +0 -81
@@ -1,4 +1,4 @@
1
- //#region ../types/dist/event-category-H4AVePnn.mjs
1
+ //#region ../types/dist/event-category-D4HJq7Mw.mjs
2
2
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
3
3
  EventCategory["SystemBoot"] = "system.boot";
4
4
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -151,6 +151,11 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
151
151
  /** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
152
152
  * thumb is a scrub gap the recorder's keyframe backfill covers. */
153
153
  EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
154
+ /** Export render progress (0–100). Telemetry (D8): a lost tick is a stale
155
+ * progress bar the client reconciles via `recordingExport.getExport`. */
156
+ EventCategory["RecordingExportProgress"] = "recording.export.progress";
157
+ EventCategory["RecordingExportCompleted"] = "recording.export.completed";
158
+ EventCategory["RecordingExportFailed"] = "recording.export.failed";
154
159
  EventCategory["DetectionEvent"] = "detection.event";
155
160
  EventCategory["SessionTrackNew"] = "session.track.new";
156
161
  EventCategory["SessionTrackExpired"] = "session.track.expired";
@@ -440,6 +445,25 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
440
445
  */
441
446
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
442
447
  /**
448
+ * Fired by `addon-post-analysis` when a package-drop is confirmed inside
449
+ * a package zone — a newly-appeared stationary object of a package class
450
+ * that cleared the class / zone / dwell / size gates. Payload:
451
+ * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
452
+ * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
453
+ * Telemetry (D8): the durable record is the `package-events` store row;
454
+ * this bus topic drives notifier rules + live UI. See
455
+ * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
456
+ */
457
+ EventCategory["PipelineAnalyticsPackageDelivered"] = "pipeline-analytics.package-delivered";
458
+ /**
459
+ * Fired by `addon-post-analysis` when a previously-delivered package
460
+ * leaves its zone (the stationary entry departed — moved or swept).
461
+ * Payload: `PipelineAnalyticsPackagePickedUpPayload` carrying
462
+ * `{ deviceId, entryId, deliveredEventId, className, timestamp }`.
463
+ * Telemetry (D8). See package-zones-design §5.2.
464
+ */
465
+ EventCategory["PipelineAnalyticsPackagePickedUp"] = "pipeline-analytics.package-picked-up";
466
+ /**
443
467
  * Fired by `addon-post-analysis` whenever a gallery face row changes:
444
468
  * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
445
469
  * `'unassigned'` its identity link changed, `'deleted'` the row was
@@ -5178,6 +5202,25 @@ function _instanceof(cls, params = {}) {
5178
5202
  };
5179
5203
  return inst;
5180
5204
  }
5205
+ //#endregion
5206
+ //#region ../../node_modules/zod/v4/classic/compat.js
5207
+ /** @deprecated Use the raw string literal codes instead, e.g. "invalid_type". */
5208
+ var ZodIssueCode = {
5209
+ invalid_type: "invalid_type",
5210
+ too_big: "too_big",
5211
+ too_small: "too_small",
5212
+ invalid_format: "invalid_format",
5213
+ not_multiple_of: "not_multiple_of",
5214
+ unrecognized_keys: "unrecognized_keys",
5215
+ invalid_union: "invalid_union",
5216
+ invalid_key: "invalid_key",
5217
+ invalid_element: "invalid_element",
5218
+ invalid_value: "invalid_value",
5219
+ custom: "custom"
5220
+ };
5221
+ /** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */
5222
+ var ZodFirstPartyTypeKind;
5223
+ ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5181
5224
  Object.fromEntries([
5182
5225
  {
5183
5226
  id: "overview",
@@ -7537,6 +7580,62 @@ function migrateConfigToBands(config) {
7537
7580
  return schedules.map((schedule) => bandFromSchedule(schedule, bandMode, config));
7538
7581
  }
7539
7582
  /**
7583
+ * Ops-log — the durable, append-only operations audit shared by the
7584
+ * recordings and events management surfaces.
7585
+ *
7586
+ * ONE row shape is reused for both domains so a single "Activity" view can
7587
+ * merge the recorder's DurableState ring (recordings ops-log) and the
7588
+ * pipeline-analytics SQLite collection (events ops-log). Each row records a
7589
+ * management operation, WHY it ran (reason), and its measurable effect
7590
+ * (itemsAffected + bytesReclaimed). Writes are best-effort — a failed log must
7591
+ * never fail the operation it records.
7592
+ */
7593
+ /** Which management domain the operation belongs to. */
7594
+ var OpsLogDomainSchema = _enum(["recording", "events"]);
7595
+ /** The kind of management operation performed. */
7596
+ var OpsLogOpSchema = _enum([
7597
+ "prune",
7598
+ "manual-delete",
7599
+ "rescan",
7600
+ "retention-run"
7601
+ ]);
7602
+ /** Why the operation ran. */
7603
+ var OpsLogReasonSchema = _enum([
7604
+ "retention",
7605
+ "quota",
7606
+ "manual",
7607
+ "operator"
7608
+ ]);
7609
+ /** One audit row, shared verbatim by both domains. */
7610
+ var OpsLogEntrySchema = object({
7611
+ /** Unique row id. */
7612
+ id: string(),
7613
+ /** Epoch ms the operation completed. */
7614
+ at: number(),
7615
+ domain: OpsLogDomainSchema,
7616
+ op: OpsLogOpSchema,
7617
+ reason: OpsLogReasonSchema,
7618
+ /** The camera the op targeted; null for a cluster/global op. */
7619
+ deviceId: number().nullable(),
7620
+ /** Node that performed the op (the log carries nodeId — no cross-node aggregation). */
7621
+ nodeId: string(),
7622
+ /** Buckets / rows deleted (op-specific unit). */
7623
+ itemsAffected: number(),
7624
+ /** Bytes reclaimed by the op (0 when not measurable). */
7625
+ bytesReclaimed: number(),
7626
+ /** Free-text detail (e.g. "floor moved to <ts>"); null when none. */
7627
+ detail: string().nullable(),
7628
+ /** Who/what triggered the op. */
7629
+ actor: string()
7630
+ });
7631
+ /** Shared query input for the per-domain `listOpsLog` cap methods. */
7632
+ var OpsLogQueryInputSchema = object({
7633
+ /** Restrict to a single camera; omit for every row. */
7634
+ deviceId: number().optional(),
7635
+ /** Max rows returned, newest-first. */
7636
+ limit: number().int().min(1).max(1e3).optional()
7637
+ });
7638
+ /**
7540
7639
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
7541
7640
  * storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
7542
7641
  * so the persisted record schema and the consumer-facing cap can both consume it
@@ -8156,7 +8255,10 @@ var COCO_TO_MACRO = {
8156
8255
  elephant: "animal",
8157
8256
  bear: "animal",
8158
8257
  zebra: "animal",
8159
- giraffe: "animal"
8258
+ giraffe: "animal",
8259
+ suitcase: "package",
8260
+ backpack: "package",
8261
+ handbag: "package"
8160
8262
  },
8161
8263
  preserveOriginal: false
8162
8264
  };
@@ -13751,7 +13853,11 @@ array(ZoneRuleSchema).readonly();
13751
13853
  * Extend the enum here when a new gating consumer comes online (audio
13752
13854
  * gating, alert filtering, …) — no other surface needs to change.
13753
13855
  */
13754
- var ZoneRuleStageEnum = _enum(["motion", "detection"]);
13856
+ var ZoneRuleStageEnum = _enum([
13857
+ "motion",
13858
+ "detection",
13859
+ "package"
13860
+ ]);
13755
13861
  DeviceType.Camera, method(object({
13756
13862
  deviceId: number(),
13757
13863
  stage: ZoneRuleStageEnum
@@ -13764,7 +13870,8 @@ DeviceType.Camera, method(object({
13764
13870
  auth: "admin"
13765
13871
  }), object({
13766
13872
  motion: array(ZoneRuleSchema).readonly(),
13767
- detection: array(ZoneRuleSchema).readonly()
13873
+ detection: array(ZoneRuleSchema).readonly(),
13874
+ package: array(ZoneRuleSchema).readonly()
13768
13875
  });
13769
13876
  var ProviderStatusSchema = object({
13770
13877
  connected: boolean(),
@@ -17157,6 +17264,7 @@ var EventKindIconSchema = _enum([
17157
17264
  "smoke",
17158
17265
  "water",
17159
17266
  "button",
17267
+ "package",
17160
17268
  "generic"
17161
17269
  ]);
17162
17270
  var EventKindCategorySchema = _enum([
@@ -17164,7 +17272,8 @@ var EventKindCategorySchema = _enum([
17164
17272
  "audio",
17165
17273
  "detection",
17166
17274
  "sensor",
17167
- "custom"
17275
+ "custom",
17276
+ "package"
17168
17277
  ]);
17169
17278
  var EventKindDescriptorSchema = object({
17170
17279
  /** Stable kind id (e.g. 'motion', 'person', 'contact'). */
@@ -17505,6 +17614,26 @@ var TrackCascadeCountsSchema = object({
17505
17614
  /** Per-track CLIP search vectors removed (best-effort). */
17506
17615
  embeddings: number().int()
17507
17616
  });
17617
+ /** Event-store footprint for one camera. */
17618
+ var EventStoreDeviceFootprintSchema = object({
17619
+ deviceId: number(),
17620
+ /** Persisted event rows (motion + object + audio) for the camera. */
17621
+ rows: number().int(),
17622
+ /** Event-owned media bytes on disk for the camera. */
17623
+ bytes: number().int()
17624
+ });
17625
+ /** Aggregate event-store footprint: global totals + per-camera breakdown. */
17626
+ var EventStoreFootprintSchema = object({
17627
+ totalRows: number().int(),
17628
+ totalBytes: number().int(),
17629
+ devices: array(EventStoreDeviceFootprintSchema).readonly()
17630
+ });
17631
+ /** Per-kind counts returned by the event-prune / device-delete mutations. */
17632
+ var EventPruneCountsSchema = object({
17633
+ motion: number().int(),
17634
+ object: number().int(),
17635
+ audio: number().int()
17636
+ });
17508
17637
  DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
17509
17638
  deviceId: number(),
17510
17639
  trackId: string()
@@ -17568,6 +17697,21 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17568
17697
  }), {
17569
17698
  kind: "mutation",
17570
17699
  auth: "admin"
17700
+ }), method(object({}), EventStoreFootprintSchema, {
17701
+ kind: "query",
17702
+ auth: "admin"
17703
+ }), method(object({
17704
+ olderThanMs: number(),
17705
+ reason: OpsLogReasonSchema.optional()
17706
+ }), EventPruneCountsSchema, {
17707
+ kind: "mutation",
17708
+ auth: "admin"
17709
+ }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
17710
+ kind: "mutation",
17711
+ auth: "admin"
17712
+ }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17713
+ kind: "query",
17714
+ auth: "admin"
17571
17715
  }), method(object({
17572
17716
  eventId: string(),
17573
17717
  kind: MediaFileKindEnum.optional()
@@ -20926,14 +21070,162 @@ var recordingCapability = {
20926
21070
  auth: "admin"
20927
21071
  }),
20928
21072
  /** Apply this device's retention policy to footage now; returns the oldest
20929
- * surviving footage start (the retention floor) or null if no footage. */
20930
- pruneFootage: method(object({ deviceId: number() }), object({
21073
+ * surviving footage start (the retention floor) or null if no footage. The
21074
+ * prune is logged to the recordings ops-log with `reason` (default
21075
+ * `'retention'` — the policy-driven prune; `'quota'` when disk-pressure
21076
+ * triggered). */
21077
+ pruneFootage: method(object({
21078
+ deviceId: number(),
21079
+ reason: OpsLogReasonSchema.optional()
21080
+ }), object({
20931
21081
  floorMs: number().nullable(),
20932
21082
  deletedBuckets: number().int(),
20933
21083
  reclaimedBytes: number().int()
20934
21084
  }), {
20935
21085
  kind: "mutation",
20936
21086
  auth: "admin"
21087
+ }),
21088
+ /**
21089
+ * Manually delete a camera's footage — the whole footprint, or a
21090
+ * `[fromMs, toMs)` window when either bound is given. Logged to the
21091
+ * recordings ops-log as `op:'manual-delete', reason:'manual'`. Destructive:
21092
+ * the admin UI guards it behind a confirm.
21093
+ */
21094
+ deleteFootprint: method(object({
21095
+ deviceId: number(),
21096
+ fromMs: number().optional(),
21097
+ toMs: number().optional()
21098
+ }), object({
21099
+ deletedBuckets: number().int(),
21100
+ reclaimedBytes: number().int()
21101
+ }), {
21102
+ kind: "mutation",
21103
+ auth: "admin"
21104
+ }),
21105
+ /** The recordings ops-log rows (newest-first), optionally scoped to one
21106
+ * camera. Backed by the recorder's bounded DurableState ring. */
21107
+ listOpsLog: method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
21108
+ kind: "query",
21109
+ auth: "admin"
21110
+ })
21111
+ }
21112
+ };
21113
+ /**
21114
+ * `recordingExport` cap — render a footage time range into a single downloadable
21115
+ * MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
21116
+ * bounded lifetime with a durable history, auto-expiry, and optional
21117
+ * delete-after-download.
21118
+ *
21119
+ * Like `recording` this is a `scope:'system', mode:'singleton'` cap: the
21120
+ * recorder self-gates so exactly ONE node (the designated `recordingNodeId`,
21121
+ * default `hub`) registers it. Device-scoped methods carry `deviceId` in their
21122
+ * input and dispatch to that single provider; the render runs on the node that
21123
+ * owns the footage (no cross-node segment transfer). Download rides the
21124
+ * framework addon data-plane. State persists in a DurableState blob (NOT
21125
+ * SQLite); history rows survive file deletion for audit.
21126
+ */
21127
+ /** Playback-speed multiplier for the render (1 = realtime). */
21128
+ var ExportSpeedSchema = number().min(.25).max(32);
21129
+ /** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
21130
+ var ExportTimelapseSchema = object({
21131
+ everyMs: number().int().positive(),
21132
+ outputFps: number().int().min(1).max(60).optional()
21133
+ });
21134
+ /**
21135
+ * Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
21136
+ * is honoured only for a realtime-ish speed (0.5–2×); timelapse is always
21137
+ * silent. `maxLifeMs` bounds how long the finished file is kept;
21138
+ * `deleteAfterDownload` removes it shortly after the first complete download.
21139
+ */
21140
+ var ExportOptionsSchema = object({
21141
+ speed: ExportSpeedSchema.optional(),
21142
+ timelapse: ExportTimelapseSchema.optional(),
21143
+ includeAudio: boolean(),
21144
+ maxLifeMs: number().int().positive(),
21145
+ deleteAfterDownload: boolean(),
21146
+ title: string().max(200).optional()
21147
+ }).superRefine((v, ctx) => {
21148
+ if (v.speed !== void 0 && v.timelapse !== void 0) ctx.addIssue({
21149
+ code: ZodIssueCode.custom,
21150
+ message: "speed and timelapse are mutually exclusive",
21151
+ path: ["timelapse"]
21152
+ });
21153
+ });
21154
+ var ExportStateSchema = _enum([
21155
+ "queued",
21156
+ "rendering",
21157
+ "ready",
21158
+ "failed",
21159
+ "expired",
21160
+ "deleted"
21161
+ ]);
21162
+ /** One export job / history row. */
21163
+ var ExportRecordSchema = object({
21164
+ id: string(),
21165
+ deviceId: number(),
21166
+ profile: string(),
21167
+ fromMs: number(),
21168
+ toMs: number(),
21169
+ options: ExportOptionsSchema,
21170
+ state: ExportStateSchema,
21171
+ /** 0–100 while rendering; null otherwise. */
21172
+ progressPct: number().nullable(),
21173
+ /** File size once ready; null before. */
21174
+ fileBytes: number().nullable(),
21175
+ expiresAt: number(),
21176
+ deleteAfterDownload: boolean(),
21177
+ /** Epoch of the first complete download; null until then. */
21178
+ downloadedAt: number().nullable(),
21179
+ createdAt: number(),
21180
+ /** User id/name that requested the export. */
21181
+ createdBy: string(),
21182
+ /** Failure reason when state is 'failed'; null otherwise. */
21183
+ error: string().nullable()
21184
+ });
21185
+ /** Candidate download URLs (LAN first, then operator extra hosts). */
21186
+ var ExportDownloadSchema = object({
21187
+ url: string(),
21188
+ endpoints: array(string())
21189
+ });
21190
+ var recordingExportCapability = {
21191
+ name: "recordingExport",
21192
+ scope: "system",
21193
+ mode: "singleton",
21194
+ methods: {
21195
+ /** Queue a render of `[fromMs,toMs)` for `deviceId`/`profile`. Fails fast
21196
+ * when no footage covers the range. Returns the queued record. */
21197
+ createExport: method(object({
21198
+ deviceId: number(),
21199
+ profile: string(),
21200
+ fromMs: number(),
21201
+ toMs: number(),
21202
+ options: ExportOptionsSchema
21203
+ }), ExportRecordSchema, {
21204
+ kind: "mutation",
21205
+ auth: "protected"
21206
+ }),
21207
+ /** All export rows (history included), optionally scoped to one device. */
21208
+ listExports: method(object({ deviceId: number().optional() }), array(ExportRecordSchema), {
21209
+ kind: "query",
21210
+ auth: "protected"
21211
+ }),
21212
+ getExport: method(object({ exportId: string() }), ExportRecordSchema, {
21213
+ kind: "query",
21214
+ auth: "protected"
21215
+ }),
21216
+ /** Abort a queued/rendering export; the partial file is removed. */
21217
+ cancelExport: method(object({ exportId: string() }), ExportRecordSchema, {
21218
+ kind: "mutation",
21219
+ auth: "protected"
21220
+ }),
21221
+ /** Remove the file but keep the history row (state → 'deleted'). */
21222
+ deleteExport: method(object({ exportId: string() }), ExportRecordSchema, {
21223
+ kind: "mutation",
21224
+ auth: "protected"
21225
+ }),
21226
+ getDownloadUrl: method(object({ exportId: string() }), ExportDownloadSchema, {
21227
+ kind: "query",
21228
+ auth: "protected"
20937
21229
  })
20938
21230
  }
20939
21231
  };
@@ -23955,6 +24247,12 @@ Object.freeze({
23955
24247
  addonId: null,
23956
24248
  access: "delete"
23957
24249
  },
24250
+ "pipelineAnalytics.deleteDeviceEvents": {
24251
+ capName: "pipeline-analytics",
24252
+ capScope: "device",
24253
+ addonId: null,
24254
+ access: "delete"
24255
+ },
23958
24256
  "pipelineAnalytics.deleteTracks": {
23959
24257
  capName: "pipeline-analytics",
23960
24258
  capScope: "device",
@@ -23985,6 +24283,12 @@ Object.freeze({
23985
24283
  addonId: null,
23986
24284
  access: "view"
23987
24285
  },
24286
+ "pipelineAnalytics.getEventStoreFootprint": {
24287
+ capName: "pipeline-analytics",
24288
+ capScope: "device",
24289
+ addonId: null,
24290
+ access: "view"
24291
+ },
23988
24292
  "pipelineAnalytics.getKeyEvents": {
23989
24293
  capName: "pipeline-analytics",
23990
24294
  capScope: "device",
@@ -24027,6 +24331,12 @@ Object.freeze({
24027
24331
  addonId: null,
24028
24332
  access: "view"
24029
24333
  },
24334
+ "pipelineAnalytics.listOpsLog": {
24335
+ capName: "pipeline-analytics",
24336
+ capScope: "device",
24337
+ addonId: null,
24338
+ access: "view"
24339
+ },
24030
24340
  "pipelineAnalytics.listRecentTracks": {
24031
24341
  capName: "pipeline-analytics",
24032
24342
  capScope: "device",
@@ -24039,6 +24349,12 @@ Object.freeze({
24039
24349
  addonId: null,
24040
24350
  access: "view"
24041
24351
  },
24352
+ "pipelineAnalytics.pruneEvents": {
24353
+ capName: "pipeline-analytics",
24354
+ capScope: "device",
24355
+ addonId: null,
24356
+ access: "create"
24357
+ },
24042
24358
  "pipelineAnalytics.pruneEventsBefore": {
24043
24359
  capName: "pipeline-analytics",
24044
24360
  capScope: "device",
@@ -24801,6 +25117,12 @@ Object.freeze({
24801
25117
  addonId: null,
24802
25118
  access: "create"
24803
25119
  },
25120
+ "recording.deleteFootprint": {
25121
+ capName: "recording",
25122
+ capScope: "system",
25123
+ addonId: null,
25124
+ access: "delete"
25125
+ },
24804
25126
  "recording.getAvailability": {
24805
25127
  capName: "recording",
24806
25128
  capScope: "system",
@@ -24831,6 +25153,12 @@ Object.freeze({
24831
25153
  addonId: null,
24832
25154
  access: "view"
24833
25155
  },
25156
+ "recording.listOpsLog": {
25157
+ capName: "recording",
25158
+ capScope: "system",
25159
+ addonId: null,
25160
+ access: "view"
25161
+ },
24834
25162
  "recording.locateSegment": {
24835
25163
  capName: "recording",
24836
25164
  capScope: "system",
@@ -24861,6 +25189,42 @@ Object.freeze({
24861
25189
  addonId: null,
24862
25190
  access: "create"
24863
25191
  },
25192
+ "recordingExport.cancelExport": {
25193
+ capName: "recordingExport",
25194
+ capScope: "system",
25195
+ addonId: null,
25196
+ access: "create"
25197
+ },
25198
+ "recordingExport.createExport": {
25199
+ capName: "recordingExport",
25200
+ capScope: "system",
25201
+ addonId: null,
25202
+ access: "create"
25203
+ },
25204
+ "recordingExport.deleteExport": {
25205
+ capName: "recordingExport",
25206
+ capScope: "system",
25207
+ addonId: null,
25208
+ access: "delete"
25209
+ },
25210
+ "recordingExport.getDownloadUrl": {
25211
+ capName: "recordingExport",
25212
+ capScope: "system",
25213
+ addonId: null,
25214
+ access: "view"
25215
+ },
25216
+ "recordingExport.getExport": {
25217
+ capName: "recordingExport",
25218
+ capScope: "system",
25219
+ addonId: null,
25220
+ access: "view"
25221
+ },
25222
+ "recordingExport.listExports": {
25223
+ capName: "recordingExport",
25224
+ capScope: "system",
25225
+ addonId: null,
25226
+ access: "view"
25227
+ },
24864
25228
  "sceneMonitor.captureReference": {
24865
25229
  capName: "scene-monitor",
24866
25230
  capScope: "device",
@@ -26222,4 +26586,4 @@ function defaultDeviceFor(id) {
26222
26586
  return def(id).defaultDevice;
26223
26587
  }
26224
26588
  //#endregion
26225
- export { boolean as $, recordingCapability as A, DeviceFeature as B, mapAudioLabelToMacro as C, nodePin as D, motionDetectionCapability as E, supportedRuntimes as F, makeProfileBrokerId as G, createEvent as H, webrtcSessionCapability as I, parseProfileBrokerId as J, makeSourceBrokerId as K, errMsg as L, runtimeDevices as M, storageEvictableCapability as N, pipelineExecutorCapability as O, streamBrokerCapability as P, array as Q, BaseAddon as R, hfModelUrl as S, migrateConfigToBands as T, hydrateSchema as U, DeviceType as V, isEvent as W, sleep as X, selectAssignedProfileSlots as Y, _enum as Z, customAction as _, COCO_TO_MACRO as a, record as at, detectionPipelineCapability as b, EncodeProfileSchema as c, EventCategory as ct, RingBuffer as d, discriminatedUnion as et, YAMNET_TO_MACRO as f, cameraStreamsCapability as g, audioAnalyzerCapability as h, COCO_80_LABELS as i, object as it, resolveScrubThumbnailGeometry as j, pipelineRunnerCapability as k, HF_BASE_URL as l, audioAnalysisCapability as m, AUDIO_BACKEND_CHOICES as n, literal as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, string as ot, addonWidgetsSourceCapability as p, parseJsonUnknown as q, AUDIO_MACRO_LABELS as r, number as rt, EVENT_PAD_MS as s, union as st, APPLE_SA_TO_MACRO as t, lazy as tt, RecordingConfigSchema as u, defaultDeviceFor as v, maskUrlCredentials as w, evaluateZoneRules as x, defineCustomActions as y, CAM_PROFILE_ORDER as z };
26589
+ export { sleep as $, pipelineExecutorCapability as A, errMsg as B, evaluateZoneRules as C, migrateConfigToBands as D, maskUrlCredentials as E, runtimeDevices as F, createEvent as G, CAM_PROFILE_ORDER as H, storageEvictableCapability as I, makeProfileBrokerId as J, hydrateSchema as K, streamBrokerCapability as L, recordingCapability as M, recordingExportCapability as N, motionDetectionCapability as O, resolveScrubThumbnailGeometry as P, selectAssignedProfileSlots as Q, supportedRuntimes as R, detectionPipelineCapability as S, mapAudioLabelToMacro as T, DeviceFeature as U, BaseAddon as V, DeviceType as W, parseJsonUnknown as X, makeSourceBrokerId as Y, parseProfileBrokerId as Z, audioAnalyzerCapability as _, COCO_TO_MACRO as a, literal as at, defaultDeviceFor as b, EncodeProfileSchema as c, record as ct, OpsLogEntrySchema as d, EventCategory as dt, _enum as et, RecordingConfigSchema as f, audioAnalysisCapability as g, addonWidgetsSourceCapability as h, COCO_80_LABELS as i, lazy as it, pipelineRunnerCapability as j, nodePin as k, ExportRecordSchema as l, string as lt, YAMNET_TO_MACRO as m, AUDIO_BACKEND_CHOICES as n, boolean as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, number as ot, RingBuffer as p, isEvent as q, AUDIO_MACRO_LABELS as r, discriminatedUnion as rt, EVENT_PAD_MS as s, object as st, APPLE_SA_TO_MACRO as t, array as tt, HF_BASE_URL as u, union as ut, cameraStreamsCapability as v, hfModelUrl as w, defineCustomActions as x, customAction as y, webrtcSessionCapability as z };
@@ -328,4 +328,4 @@ function deleteModelFromDisk(modelsDir, entry, format) {
328
328
  return true;
329
329
  }
330
330
  //#endregion
331
- export { isModelDownloaded as a, ensureModel as i, deleteModelFromDisk as n, downloadFile as r, createFileDataPlaneHandler as t };
331
+ export { ensureModel as a, downloadFile as i, createFileDataPlaneHandler as n, isModelDownloaded as o, deleteModelFromDisk as r, parseRangeHeader as s, contentTypeFor as t };
@@ -329,6 +329,12 @@ function deleteModelFromDisk(modelsDir, entry, format) {
329
329
  return true;
330
330
  }
331
331
  //#endregion
332
+ Object.defineProperty(exports, "contentTypeFor", {
333
+ enumerable: true,
334
+ get: function() {
335
+ return contentTypeFor;
336
+ }
337
+ });
332
338
  Object.defineProperty(exports, "createFileDataPlaneHandler", {
333
339
  enumerable: true,
334
340
  get: function() {
@@ -359,3 +365,9 @@ Object.defineProperty(exports, "isModelDownloaded", {
359
365
  return isModelDownloaded;
360
366
  }
361
367
  });
368
+ Object.defineProperty(exports, "parseRangeHeader", {
369
+ enumerable: true,
370
+ get: function() {
371
+ return parseRangeHeader;
372
+ }
373
+ });
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-DynD1EC-.js");
5
+ const require_dist = require("../dist-DlMmkOsE.js");
6
6
  let node_fs = require("node:fs");
7
7
  let node_path = require("node:path");
8
8
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { E as motionDetectionCapability, R as BaseAddon, U as hydrateSchema, V as DeviceType, x as evaluateZoneRules } from "../dist-CcqqznPf.mjs";
1
+ import { C as evaluateZoneRules, K as hydrateSchema, O as motionDetectionCapability, V as BaseAddon, W as DeviceType } from "../dist-LkwlodgP.mjs";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-D6vf50IK.js");
6
- const require_dist = require("../dist-DynD1EC-.js");
6
+ const require_dist = require("../dist-DlMmkOsE.js");
7
7
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
8
8
  const require_sheet_geometry = require("../sheet-geometry-BR-ip0CP.js");
9
9
  const require_worker_protocol = require("../worker-protocol-PP4jKHHJ.js");
10
- const require_step_definitions = require("../step-definitions-DhhwklAL.js");
10
+ const require_step_definitions = require("../step-definitions-CxwB0fEq.js");
11
11
  let node_child_process = require("node:child_process");
12
12
  let node_url = require("node:url");
13
13
  let sharp = require("sharp");
@@ -1,8 +1,8 @@
1
- import { $ as boolean, D as nodePin, H as createEvent, L as errMsg, Q as array, R as BaseAddon, Z as _enum, _ as customAction, ct as EventCategory, it as object, k as pipelineRunnerCapability, ot as string, rt as number, tt as lazy, y as defineCustomActions } from "../dist-CcqqznPf.mjs";
1
+ import { B as errMsg, G as createEvent, V as BaseAddon, dt as EventCategory, et as _enum, it as lazy, j as pipelineRunnerCapability, k as nodePin, lt as string, nt as boolean, ot as number, st as object, tt as array, x as defineCustomActions, y as customAction } from "../dist-LkwlodgP.mjs";
2
2
  import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
3
3
  import { r as resolveHubHostname } from "../sheet-geometry-DcpuGTCm.mjs";
4
4
  import { t as isWorkerReply } from "../worker-protocol-CyVJTZEO.mjs";
5
- import { a as getStepDefinition } from "../step-definitions-CvwB_Otk.mjs";
5
+ import { a as getStepDefinition } from "../step-definitions-DxN9tmQP.mjs";
6
6
  import { fork } from "node:child_process";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import sharp from "sharp";