@camstack/addon-pipeline 1.2.225 → 1.2.227

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/{default-detection-model-BseJDKpG.js → default-detection-model-C1etqCJk.js} +1 -1
  4. package/dist/{default-detection-model-A2qZmOuO.mjs → default-detection-model-CNwum1uC.mjs} +1 -1
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-DXilmc1W.js → dist-BGdDektN.js} +131 -50
  8. package/dist/{dist-InCt3_5U.mjs → dist-d1K9t4mU.mjs} +131 -50
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/{node--Icxw2jo.js → node-CQ5yofm2.js} +1 -1
  12. package/dist/{node-B6Wz_gqK.mjs → node-CpckZhmU.mjs} +1 -1
  13. package/dist/pipeline-runner/index.js +3 -3
  14. package/dist/pipeline-runner/index.mjs +3 -3
  15. package/dist/{process-memory-pGbtKNsw.js → process-memory-D2NCFwt_.js} +1 -1
  16. package/dist/{process-memory-DnuJjAW1.mjs → process-memory-iUDS4M_G.mjs} +1 -1
  17. package/dist/recorder/index.js +2 -2
  18. package/dist/recorder/index.mjs +2 -2
  19. package/dist/{segment-demux-js-jnT5YAxt.js → segment-demux-js-Dk_Pvocs.js} +1 -1
  20. package/dist/{segment-demux-js-CB9SGcWW.mjs → segment-demux-js-iVyZ1H9j.mjs} +1 -1
  21. package/dist/stream-broker/_stub.js +26 -25
  22. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-qdJULtL7.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-7qCmXLC3.mjs} +3 -3
  23. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bc-sSkWV.mjs +26 -0
  24. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CKUGpDns.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CUMGe_Dp.mjs} +1 -1
  25. package/dist/stream-broker/demux-worker-child.js +1 -1
  26. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  27. package/dist/stream-broker/{hostInit-DyfYYXXI.mjs → hostInit-D6wBZr7_.mjs} +3 -3
  28. package/dist/stream-broker/index.js +3 -3
  29. package/dist/stream-broker/index.mjs +3 -3
  30. package/dist/stream-broker/remoteEntry.js +1 -1
  31. package/package.json +3 -3
  32. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-gz4b6miC.mjs +0 -26
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- //#region ../types/dist/event-category-DAXzJeTX.mjs
2
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -560,7 +560,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
560
560
  * a package zone — a newly-appeared stationary object of a package class
561
561
  * that cleared the class / zone / dwell / size gates. Payload:
562
562
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
563
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
563
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
564
564
  * Telemetry (D8): the durable record is the `package-events` store row;
565
565
  * this bus topic drives notifier rules + live UI. See
566
566
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -5346,7 +5346,7 @@ var ZodIssueCode = {
5346
5346
  var ZodFirstPartyTypeKind;
5347
5347
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5348
5348
  //#endregion
5349
- //#region ../types/dist/sleep-BnujYGPe.mjs
5349
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
5350
5350
  /**
5351
5351
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5352
5352
  * window to float samples (D455).
@@ -8171,13 +8171,30 @@ new Set([
8171
8171
  "scene",
8172
8172
  "motion",
8173
8173
  "object",
8174
- "audio"
8174
+ "audio",
8175
+ "mosaic"
8175
8176
  ]);
8176
- new Set([
8177
+ /**
8178
+ * The owner types that are event tables, in the order the event-media resolver
8179
+ * should consider them. Exported so a consumer asking "is this key an event?"
8180
+ * does not re-spell the list and drift from it.
8181
+ */
8182
+ var EVENT_OWNER_TYPES = [
8177
8183
  "motion",
8178
8184
  "object",
8179
8185
  "audio"
8180
- ]);
8186
+ ];
8187
+ /**
8188
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
8189
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
8190
+ * `(table, id)`).
8191
+ *
8192
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
8193
+ * table would otherwise be accepted by the codec and refused at the door, with
8194
+ * nothing failing until a caller asked.
8195
+ */
8196
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
8197
+ new Set(EVENT_OWNER_TYPES);
8181
8198
  var EncodeProfileSchema = object({
8182
8199
  video: object({
8183
8200
  codec: _enum([
@@ -14565,6 +14582,16 @@ method(object({
14565
14582
  filter: QueryFilterSchema.optional(),
14566
14583
  columns: array(string()).readonly().optional()
14567
14584
  }), array(SettingsRecordSchema).readonly()), method(object({
14585
+ namespace: string().optional(),
14586
+ collection: string(),
14587
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
14588
+ * index on the collection. Never empty. */
14589
+ conflict: array(string()).readonly(),
14590
+ record: BulkRecordSchema
14591
+ }), object({
14592
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
14593
+ * row's own id on an update. */
14594
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
14568
14595
  namespace: string().optional(),
14569
14596
  collection: string(),
14570
14597
  record: object({
@@ -14699,6 +14726,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
14699
14726
  id: union([string(), number()]) }), {
14700
14727
  kind: "mutation",
14701
14728
  auth: "admin"
14729
+ }), method(object({
14730
+ namespace: string().optional(),
14731
+ collection: string(),
14732
+ conflict: array(string()).readonly(),
14733
+ record: BulkRecordSchema
14734
+ }), object({ id: union([string(), number()]) }), {
14735
+ kind: "mutation",
14736
+ auth: "admin"
14702
14737
  }), method(object({
14703
14738
  namespace: string().optional(),
14704
14739
  collection: string(),
@@ -21527,8 +21562,8 @@ var TrackPositionSchema = object({
21527
21562
  var TrackSnapshotSchema = object({
21528
21563
  timestamp: number(),
21529
21564
  position: TrackPositionSchema,
21530
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
21531
- mediaKey: string()
21565
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
21566
+ mediaId: number().int()
21532
21567
  });
21533
21568
  /**
21534
21569
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -22132,14 +22167,14 @@ var ObjectEventSchema = object({
22132
22167
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
22133
22168
  frameWidth: number().optional(),
22134
22169
  frameHeight: number().optional(),
22135
- /** MediaStore key for the crop attached to this event (if any). */
22136
- mediaKey: string().optional(),
22137
- /** Design B: MediaStore key of the track's native-resolution key frame (the
22170
+ /** Media row id of the crop attached to this event (if any) — D482. */
22171
+ mediaId: number().int().optional(),
22172
+ /** Design B: media row id of the track's native-resolution key frame (the
22138
22173
  * best-detection full frame). Resolve via the event-media data-plane
22139
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
22174
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
22140
22175
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
22141
- * sources — consumers fall back to `mediaKey` (the tight crop). */
22142
- keyFrameMediaKey: string().optional(),
22176
+ * sources — consumers fall back to `mediaId` (the tight crop). */
22177
+ keyFrameMediaId: number().int().optional(),
22143
22178
  /** Populated by B5 (recording playback URL for this event). */
22144
22179
  mediaUrl: string().optional(),
22145
22180
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -22189,7 +22224,7 @@ var MediaFileKindEnum = _enum([
22189
22224
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
22190
22225
  *
22191
22226
  * `url` points at the `event-media` data plane
22192
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
22227
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
22193
22228
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
22194
22229
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
22195
22230
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -22197,10 +22232,13 @@ var MediaFileKindEnum = _enum([
22197
22232
  * `data-plane-access.ts` for the rule and the one gap it does not close
22198
22233
  * (per-device scoping).
22199
22234
  *
22200
- * The URL is built from the row's **stored** key, which is not always its
22201
- * published `kind`: a track's face/plate crop is stored as `crop` under
22235
+ * The URL is built from the row's own id, which since D482 says nothing about
22236
+ * the row's owner or kind — and that is the point. The published `kind` is not
22237
+ * the stored one (a track's face/plate crop is stored as `crop` under
22202
22238
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
22203
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
22239
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
22240
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
22241
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
22204
22242
  *
22205
22243
  * ## `base64` is TRANSITIONAL and is going away
22206
22244
  *
@@ -22213,7 +22251,19 @@ var MediaFileKindEnum = _enum([
22213
22251
  * `analytics-query-facade.ts`; nothing else reads it.
22214
22252
  */
22215
22253
  var MediaFileSchema = object({
22216
- key: string(),
22254
+ /**
22255
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
22256
+ *
22257
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
22258
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
22259
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
22260
+ * different rows that spell the same number, and a track whose
22261
+ * `bestEventId` was an object event was served a motion event's snapshot —
22262
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
22263
+ * surrogate id cannot name the wrong row's owner, because it names no owner
22264
+ * at all.
22265
+ */
22266
+ mediaId: number().int(),
22217
22267
  kind: MediaFileKindEnum,
22218
22268
  sizeBytes: number(),
22219
22269
  timestamp: number()
@@ -22321,7 +22371,7 @@ var RetrainTrackSchema = object({
22321
22371
  });
22322
22372
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
22323
22373
  var RetrainFrameCandidateSchema = object({
22324
- mediaKey: string(),
22374
+ mediaId: number().int(),
22325
22375
  kind: MediaFileKindEnum,
22326
22376
  timestamp: number(),
22327
22377
  sizeBytes: number().int(),
@@ -22335,7 +22385,7 @@ var RetrainFrameSchema = object({
22335
22385
  deviceId: number(),
22336
22386
  trackId: string(),
22337
22387
  /** Provenance only. It may already point at nothing — that is expected. */
22338
- sourceMediaKey: string(),
22388
+ sourceMediaId: number().int(),
22339
22389
  sourceKind: MediaFileKindEnum,
22340
22390
  sizeBytes: number().int(),
22341
22391
  width: number().int(),
@@ -22351,7 +22401,7 @@ var RetrainCopyRefusalSchema = _enum([
22351
22401
  var RetrainFrameSelectionSchema = object({
22352
22402
  copied: array(RetrainFrameSchema).readonly(),
22353
22403
  refused: array(object({
22354
- sourceMediaKey: string(),
22404
+ sourceMediaId: number().int(),
22355
22405
  reason: RetrainCopyRefusalSchema
22356
22406
  })).readonly()
22357
22407
  });
@@ -22359,7 +22409,7 @@ var RetrainFrameListSchema = object({
22359
22409
  candidates: array(RetrainFrameCandidateSchema).readonly(),
22360
22410
  copies: array(RetrainFrameSchema).readonly(),
22361
22411
  /** What the page pre-selects — the native key frame when one survives. */
22362
- autoPickMediaKey: string().optional()
22412
+ autoPickMediaId: number().int().optional()
22363
22413
  });
22364
22414
  /** What the operator asked the assist to look for. */
22365
22415
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -22454,9 +22504,11 @@ var RecentTracksQueryInput = object({
22454
22504
  });
22455
22505
  /**
22456
22506
  * A Summary (D359): the per-camera session envelope that references tracks.
22457
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
22458
- * served by the event-media plane by key), null until the first frame with a
22459
- * member visible has been materialised.
22507
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
22508
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
22509
+ * first frame with a member visible has been materialised (D482 — it was the
22510
+ * row's composite key, which embedded the owner and could name another table's
22511
+ * row once event ids became per-table rowids).
22460
22512
  */
22461
22513
  var SummarySchema = object({
22462
22514
  id: string(),
@@ -22465,7 +22517,7 @@ var SummarySchema = object({
22465
22517
  lastActiveAt: number(),
22466
22518
  sealedAt: number().nullable(),
22467
22519
  memberCount: number().int().nonnegative(),
22468
- groupShotKey: string().nullable()
22520
+ groupShotMediaId: number().int().nullable()
22469
22521
  });
22470
22522
  var SummariesQueryInput = object({
22471
22523
  deviceIds: array(number()).min(1),
@@ -23019,7 +23071,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23019
23071
  }), method(object({
23020
23072
  deviceId: number(),
23021
23073
  trackId: string(),
23022
- mediaKeys: array(string()).min(1)
23074
+ mediaIds: array(number().int()).min(1)
23023
23075
  }), RetrainFrameSelectionSchema, {
23024
23076
  kind: "mutation",
23025
23077
  auth: "admin"
@@ -23087,7 +23139,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23087
23139
  kind: "query",
23088
23140
  auth: "admin"
23089
23141
  }), method(object({
23090
- eventId: string(),
23142
+ /** Which of the three event tables owns the row. */
23143
+ ownerType: EventOwnerTypeSchema,
23144
+ /** The event's rowid in that table (D474: an event id is a number). */
23145
+ eventId: number().int(),
23091
23146
  kind: MediaFileKindEnum.optional(),
23092
23147
  deviceId: number()
23093
23148
  }), array(MediaFileSchema).readonly()), method(object({
@@ -23098,7 +23153,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23098
23153
  trackId: string(),
23099
23154
  deviceId: number()
23100
23155
  }), array(MediaFileInfoSchema).readonly()), method(object({
23101
- eventId: string(),
23156
+ ownerType: EventOwnerTypeSchema,
23157
+ eventId: number().int(),
23102
23158
  deviceId: number()
23103
23159
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
23104
23160
  kind: "mutation",
@@ -27926,8 +27982,8 @@ var IdentitySchema = object({
27926
27982
  id: string(),
27927
27983
  name: string(),
27928
27984
  sampleCount: number().int().nonnegative(),
27929
- coverMediaKey: string().optional(),
27930
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
27985
+ coverMediaId: number().int().optional(),
27986
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
27931
27987
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
27932
27988
  coverBase64: string().optional()
27933
27989
  });
@@ -27953,8 +28009,8 @@ var IdentitySampleAuditRowSchema = object({
27953
28009
  enrolledAt: number().int(),
27954
28010
  deviceId: number().int().optional(),
27955
28011
  source: _enum(["detected", "photo"]),
27956
- /** The enrolled crop's media key, so the panel can show the evidence. */
27957
- mediaKey: string().optional(),
28012
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
28013
+ mediaId: number().int().optional(),
27958
28014
  /**
27959
28015
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
27960
28016
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -28023,15 +28079,15 @@ var FaceInfoSchema = object({
28023
28079
  */
28024
28080
  cropUrl: string().optional(),
28025
28081
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
28026
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
28082
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
28027
28083
  * legacy rows written before design B. */
28028
28084
  faceBbox: BoundingBoxSchema.optional(),
28029
28085
  /** Design B: MediaStore key of the track's native-resolution key frame.
28030
28086
  * Fetch the native JPEG via the event-media data-plane
28031
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
28087
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
28032
28088
  * track produced no key frame (e.g. native/onboard source) — the UI falls
28033
28089
  * back to the inline `base64` face crop. */
28034
- keyFrameMediaKey: string().optional(),
28090
+ keyFrameMediaId: number().int().optional(),
28035
28091
  /** Winning identity-match cosine (0..1) for this face's track, when an
28036
28092
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
28037
28093
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -28100,11 +28156,14 @@ var FaceClusterSchema = object({
28100
28156
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
28101
28157
  * dialog already rendering its key FRAME from the `event-media` plane.
28102
28158
  *
28103
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
28104
- * media key directly, so this needed no new plane and no new access decision.
28159
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
28160
+ * resolves a media row by its own id, so this needed no new plane and no new
28161
+ * access decision.
28105
28162
  */
28106
28163
  var MediaFileLiteSchema$1 = object({
28107
- key: string(),
28164
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
28165
+ * (D482). It was the row's composite key, which embedded the owner. */
28166
+ mediaId: number().int(),
28108
28167
  kind: string(),
28109
28168
  url: string(),
28110
28169
  sizeBytes: number(),
@@ -28121,7 +28180,7 @@ method(object({
28121
28180
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
28122
28181
  * four times and the viewer holds at `staleTime: 30_000`.
28123
28182
  *
28124
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
28183
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
28125
28184
  * the `event-media` plane serves that key `immutable` with an ETag.
28126
28185
  *
28127
28186
  * **This is an INPUT field, so it does not reach the addon until the
@@ -30614,8 +30673,8 @@ var VehicleSchema = object({
30614
30673
  id: string(),
30615
30674
  name: string(),
30616
30675
  sampleCount: number().int().nonnegative(),
30617
- coverMediaKey: string().optional(),
30618
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
30676
+ coverMediaId: number().int().optional(),
30677
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
30619
30678
  coverBase64: string().optional()
30620
30679
  });
30621
30680
  var VehicleSampleInfoSchema = object({
@@ -30648,7 +30707,7 @@ var PlateInfoSchema = object({
30648
30707
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
30649
30708
  plateBbox: BoundingBoxSchema.optional(),
30650
30709
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
30651
- keyFrameMediaKey: string().optional(),
30710
+ keyFrameMediaId: number().int().optional(),
30652
30711
  base64: string().optional(),
30653
30712
  /**
30654
30713
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -30669,11 +30728,14 @@ var PlateInfoSchema = object({
30669
30728
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
30670
30729
  * dialog already rendering its key FRAME from the `event-media` plane.
30671
30730
  *
30672
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
30673
- * media key directly, so this needed no new plane and no new access decision.
30731
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
30732
+ * resolves a media row by its own id, so this needed no new plane and no new
30733
+ * access decision.
30674
30734
  */
30675
30735
  var MediaFileLiteSchema = object({
30676
- key: string(),
30736
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
30737
+ * (D482). It was the row's composite key, which embedded the owner. */
30738
+ mediaId: number().int(),
30677
30739
  kind: string(),
30678
30740
  url: string(),
30679
30741
  sizeBytes: number(),
@@ -30732,7 +30794,7 @@ method(object({
30732
30794
  }), method(object({
30733
30795
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
30734
30796
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
30735
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
30797
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
30736
30798
  * INPUT field: stripped by the hub router until the train ships, which
30737
30799
  * resolves to `false` and is exactly the intended default. */
30738
30800
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -32311,7 +32373,14 @@ var SceneReferenceSchema = object({
32311
32373
  modelId: string(),
32312
32374
  condition: SceneConditionSchema,
32313
32375
  capturedAt: number(),
32314
- thumbnailMediaId: string().optional(),
32376
+ /**
32377
+ * The reference thumbnail's media ROW id (D482).
32378
+ *
32379
+ * The name already said `mediaId` while the value was the row's composite
32380
+ * key — a leftover that read as done and was not. It is the row's own id
32381
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
32382
+ */
32383
+ thumbnailMediaId: number().int().optional(),
32315
32384
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
32316
32385
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
32317
32386
  * normalized rect frame a different piece of world, and the scene would
@@ -33759,7 +33828,7 @@ var StationaryObjectSchema = object({
33759
33828
  /** Enrichment label carried from the source track (identity / plate). */
33760
33829
  label: string().optional(),
33761
33830
  /** Native-resolution key-frame media key for the parked object's best image. */
33762
- keyFrameMediaKey: string().optional()
33831
+ keyFrameMediaId: number().int().optional()
33763
33832
  });
33764
33833
  var CameraOccupancySnapshotSchema = object({
33765
33834
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -35074,6 +35143,12 @@ Object.freeze({
35074
35143
  addonId: null,
35075
35144
  access: "create"
35076
35145
  },
35146
+ "dataStoreProvider.upsert": {
35147
+ capName: "data-store-provider",
35148
+ capScope: "system",
35149
+ addonId: null,
35150
+ access: "create"
35151
+ },
35077
35152
  "dayNight.getOptions": {
35078
35153
  capName: "day-night",
35079
35154
  capScope: "device",
@@ -38938,6 +39013,12 @@ Object.freeze({
38938
39013
  addonId: null,
38939
39014
  access: "create"
38940
39015
  },
39016
+ "settingsStore.upsert": {
39017
+ capName: "settings-store",
39018
+ capScope: "system",
39019
+ addonId: null,
39020
+ access: "create"
39021
+ },
38941
39022
  "smtpProvider.getStatus": {
38942
39023
  capName: "smtp-provider",
38943
39024
  capScope: "system",
@@ -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-DXilmc1W.js");
5
+ const require_dist = require("../dist-BGdDektN.js");
6
6
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Gt as BaseAddon, Jt as DeviceType, Q as evaluateZoneRules, Qt as hydrateSchema, mt as motionDetectionCapability } from "../dist-InCt3_5U.mjs";
1
+ import { Gt as BaseAddon, Jt as DeviceType, Q as evaluateZoneRules, Qt as hydrateSchema, mt as motionDetectionCapability } from "../dist-d1K9t4mU.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,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-DXilmc1W.js");
2
+ const require_dist = require("./dist-BGdDektN.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_fs = require("node:fs");
5
5
  node_fs = require_chunk.__toESM(node_fs, 1);
@@ -1,4 +1,4 @@
1
- import { Bt as Fmp4BoxSplitter, Rt as errMsg, Ut as isSoftwareDecode, Vt as buildFfmpegArgs } from "./dist-InCt3_5U.mjs";
1
+ import { Bt as Fmp4BoxSplitter, Rt as errMsg, Ut as isSoftwareDecode, Vt as buildFfmpegArgs } from "./dist-d1K9t4mU.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { realpathSync } from "node:fs";
4
4
  import path from "node:path";
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-DXilmc1W.js");
7
- const require_node = require("../node--Icxw2jo.js");
8
- const require_default_detection_model = require("../default-detection-model-BseJDKpG.js");
6
+ const require_dist = require("../dist-BGdDektN.js");
7
+ const require_node = require("../node-CQ5yofm2.js");
8
+ const require_default_detection_model = require("../default-detection-model-C1etqCJk.js");
9
9
  const require_worker_protocol = require("../worker-protocol-B2MfQLlu.js");
10
10
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
11
11
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
@@ -1,6 +1,6 @@
1
- import { B as customAction, G as deriveDetailCropRect, Gt as BaseAddon, Rt as errMsg, S as NativeLeaseSettingsSchema, St as pipelineRunnerCapability, U as defineCustomActions, Xt as createEvent, _ as FailureCounters, _n as string, b as MOTION_CLOSE_AFTER_MS, bt as pickNativeLeaseOverride, cn as array, dn as lazy, fn as literal, ln as boolean, m as DEVICE_BACKEND_TO_FORMAT, mn as object, nn as nodePin, ot as loadContributionCapability, p as DEFAULT_NATIVE_LEASE_SETTINGS, pn as number, sn as _enum, tt as failureContributionCapability, u as DEFAULT_DETAIL_CROP_CONVENTION, x as NativeLeaseAdmissionSchema, yn as EventCategory, yt as pickDetailCropConvention } from "../dist-InCt3_5U.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-B6Wz_gqK.mjs";
3
- import { i as resolveFrameViewGeometry, l as getStepDefinition, r as localFrameRegistry } from "../default-detection-model-A2qZmOuO.mjs";
1
+ import { B as customAction, G as deriveDetailCropRect, Gt as BaseAddon, Rt as errMsg, S as NativeLeaseSettingsSchema, St as pipelineRunnerCapability, U as defineCustomActions, Xt as createEvent, _ as FailureCounters, _n as string, b as MOTION_CLOSE_AFTER_MS, bt as pickNativeLeaseOverride, cn as array, dn as lazy, fn as literal, ln as boolean, m as DEVICE_BACKEND_TO_FORMAT, mn as object, nn as nodePin, ot as loadContributionCapability, p as DEFAULT_NATIVE_LEASE_SETTINGS, pn as number, sn as _enum, tt as failureContributionCapability, u as DEFAULT_DETAIL_CROP_CONVENTION, x as NativeLeaseAdmissionSchema, yn as EventCategory, yt as pickDetailCropConvention } from "../dist-d1K9t4mU.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CpckZhmU.mjs";
3
+ import { i as resolveFrameViewGeometry, l as getStepDefinition, r as localFrameRegistry } from "../default-detection-model-CNwum1uC.mjs";
4
4
  import { t as isWorkerReply } from "../worker-protocol-C_W-P_g-.mjs";
5
5
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
6
6
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-DXilmc1W.js");
2
+ const require_dist = require("./dist-BGdDektN.js");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_chunk.__toESM(node_fs);
5
5
  let node_child_process = require("node:child_process");
@@ -1,4 +1,4 @@
1
- import { gt as parseProcStatus } from "./dist-InCt3_5U.mjs";
1
+ import { gt as parseProcStatus } from "./dist-d1K9t4mU.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
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-DXilmc1W.js");
7
- const require_node = require("../node--Icxw2jo.js");
6
+ const require_dist = require("../dist-BGdDektN.js");
7
+ const require_node = require("../node-CQ5yofm2.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
9
  const require_restream_intent = require("../restream-intent-B1Difcnq.js");
10
10
  const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
@@ -1,5 +1,5 @@
1
- import { $ as evictionPolicyForMode, At as resolveRecordingProfiles, B as customAction, C as OpsLogEntrySchema, Ct as recordingCapability, D as RECORDING_EXPORT_MAX_READ_BYTES, Ft as stripRetiredBandPreBufferSec, Gt as BaseAddon, I as batteryCapability, Jt as DeviceType, K as deriveRecordingMode, Mt as storageEvictableCapability, Nt as storageOccupancyCapability, O as RecordingConfigSchema, Ot as resolveLocationMode, Qt as hydrateSchema, Rt as errMsg, Tt as recordingSignalCapability, U as defineCustomActions, W as deriveBatteryPresence, Z as evaluateSensorEdge, _n as string, an as selectAssignedProfileSlots, at as isFirstLevelMacroClass, cn as array, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, dt as mayWriteToLocation, et as evictionPolicyOfLocation, ft as migrateLegacyDeviceSignalConfig, g as ExportRecordSchema, gn as record, hn as preprocess, i as BatteryStatusSchema, k as RecordingSignalStatusSchema, ln as boolean, mn as object, nn as nodePin, nt as gbToBytes, on as sleep$1, ot as loadContributionCapability, pn as number, pt as modeMayWrite, qt as DeviceFeature, sn as _enum, ut as mayReadLocation, wt as recordingExportCapability, yn as EventCategory } from "../dist-InCt3_5U.mjs";
2
- import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-B6Wz_gqK.mjs";
1
+ import { $ as evictionPolicyForMode, At as resolveRecordingProfiles, B as customAction, C as OpsLogEntrySchema, Ct as recordingCapability, D as RECORDING_EXPORT_MAX_READ_BYTES, Ft as stripRetiredBandPreBufferSec, Gt as BaseAddon, I as batteryCapability, Jt as DeviceType, K as deriveRecordingMode, Mt as storageEvictableCapability, Nt as storageOccupancyCapability, O as RecordingConfigSchema, Ot as resolveLocationMode, Qt as hydrateSchema, Rt as errMsg, Tt as recordingSignalCapability, U as defineCustomActions, W as deriveBatteryPresence, Z as evaluateSensorEdge, _n as string, an as selectAssignedProfileSlots, at as isFirstLevelMacroClass, cn as array, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, dt as mayWriteToLocation, et as evictionPolicyOfLocation, ft as migrateLegacyDeviceSignalConfig, g as ExportRecordSchema, gn as record, hn as preprocess, i as BatteryStatusSchema, k as RecordingSignalStatusSchema, ln as boolean, mn as object, nn as nodePin, nt as gbToBytes, on as sleep$1, ot as loadContributionCapability, pn as number, pt as modeMayWrite, qt as DeviceFeature, sn as _enum, ut as mayReadLocation, wt as recordingExportCapability, yn as EventCategory } from "../dist-d1K9t4mU.mjs";
2
+ import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CpckZhmU.mjs";
3
3
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
4
4
  import { c as PREBUFFER_MAX_MS, r as RECORDING_PRE_ROLL_REQUEST_MS, s as withRecordingIntent } from "../restream-intent-DWe2kInY.mjs";
5
5
  import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-DXilmc1W.js");
2
+ const require_dist = require("./dist-BGdDektN.js");
3
3
  let node_child_process = require("node:child_process");
4
4
  //#region ../../node_modules/mp4box/dist/mp4box.all.js
5
5
  var require_mp4box_all = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
@@ -1,5 +1,5 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-DnnnRqeS.mjs";
2
- import { Rt as errMsg } from "./dist-InCt3_5U.mjs";
2
+ import { Rt as errMsg } from "./dist-d1K9t4mU.mjs";
3
3
  import { spawn } from "node:child_process";
4
4
  //#region ../../node_modules/mp4box/dist/mp4box.all.js
5
5
  var require_mp4box_all = /* @__PURE__ */ __commonJSMin(((exports) => {
@@ -1,15 +1,13 @@
1
- import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CKUGpDns.mjs";
1
+ import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CUMGe_Dp.mjs";
2
2
  import { a as p, i as m, n as h, o as g, r as _, t as v } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare__react__loadShare__.js-C9j-2lBe.mjs";
3
3
  import { n as y, r as b, t as x } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-XO0-Pyu6.mjs";
4
- import { t as S } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-gz4b6miC.mjs";
4
+ import { t as S } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bc-sSkWV.mjs";
5
5
  import { n as C, t as w } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-BO7TIbJV.mjs";
6
- //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils.js
7
- var T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), D = (e) => {
8
- let t = E(e);
6
+ //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
+ var T = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), E = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), D = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), O = (e) => {
8
+ let t = D(e);
9
9
  return t.charAt(0).toUpperCase() + t.slice(1);
10
- }, O = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), k = (e) => {
11
- for (let t in e) if (t.startsWith("aria-") || t === "role" || t === "title") return !0;
12
- }, A = {
10
+ }, k = {
13
11
  xmlns: "http://www.w3.org/2000/svg",
14
12
  width: 24,
15
13
  height: 24,
@@ -19,24 +17,27 @@ var T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) =
19
17
  strokeWidth: 2,
20
18
  strokeLinecap: "round",
21
19
  strokeLinejoin: "round"
20
+ }, A = (e) => {
21
+ for (let t in e) if (t.startsWith("aria-") || t === "role" || t === "title") return !0;
22
+ return !1;
22
23
  }, j = h(({ color: e = "currentColor", size: t = 24, strokeWidth: n = 2, absoluteStrokeWidth: r, className: i = "", children: a, iconNode: o, ...s }, c) => v("svg", {
23
24
  ref: c,
24
- ...A,
25
+ ...k,
25
26
  width: t,
26
27
  height: t,
27
28
  stroke: e,
28
29
  strokeWidth: r ? Number(n) * 24 / Number(t) : n,
29
- className: O("lucide", i),
30
- ...!a && !k(s) && { "aria-hidden": "true" },
30
+ className: T("lucide", i),
31
+ ...!a && !A(s) && { "aria-hidden": "true" },
31
32
  ...s
32
33
  }, [...o.map(([e, t]) => v(e, t)), ...Array.isArray(a) ? a : [a]])), M = (e, t) => {
33
34
  let n = h(({ className: n, ...r }, i) => v(j, {
34
35
  ref: i,
35
36
  iconNode: t,
36
- className: O(`lucide-${T(D(e))}`, `lucide-${e}`, n),
37
+ className: T(`lucide-${E(O(e))}`, `lucide-${e}`, n),
37
38
  ...r
38
39
  }));
39
- return n.displayName = D(e), n;
40
+ return n.displayName = O(e), n;
40
41
  }, N = M("check", [["path", {
41
42
  d: "M20 6 9 17l-5-5",
42
43
  key: "1gmf2c"
@@ -78,26 +79,26 @@ var T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) =
78
79
  key: "s699le"
79
80
  }]]), I = M("radio", [
80
81
  ["path", {
81
- d: "M4.9 19.1C1 15.2 1 8.8 4.9 4.9",
82
- key: "1vaf9d"
82
+ d: "M16.247 7.761a6 6 0 0 1 0 8.478",
83
+ key: "1fwjs5"
84
+ }],
85
+ ["path", {
86
+ d: "M19.075 4.933a10 10 0 0 1 0 14.134",
87
+ key: "ehdyv1"
88
+ }],
89
+ ["path", {
90
+ d: "M4.925 19.067a10 10 0 0 1 0-14.134",
91
+ key: "1q22gi"
83
92
  }],
84
93
  ["path", {
85
- d: "M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",
86
- key: "u1ii0m"
94
+ d: "M7.753 16.239a6 6 0 0 1 0-8.478",
95
+ key: "r2q7qm"
87
96
  }],
88
97
  ["circle", {
89
98
  cx: "12",
90
99
  cy: "12",
91
100
  r: "2",
92
101
  key: "1c9p78"
93
- }],
94
- ["path", {
95
- d: "M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",
96
- key: "1j5fej"
97
- }],
98
- ["path", {
99
- d: "M19.1 4.9C23 8.8 23 15.1 19.1 19",
100
- key: "10b0cb"
101
102
  }]
102
103
  ]), re = M("volume-2", [
103
104
  ["path", {