@camstack/addon-post-analysis 1.2.226 → 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.
@@ -29,7 +29,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
29
  enumerable: true
30
30
  }) : target, mod));
31
31
  //#endregion
32
- //#region ../types/dist/event-category-DAXzJeTX.mjs
32
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
33
33
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
34
34
  EventCategory["SystemBoot"] = "system.boot";
35
35
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -590,7 +590,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
590
590
  * a package zone — a newly-appeared stationary object of a package class
591
591
  * that cleared the class / zone / dwell / size gates. Payload:
592
592
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
593
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
593
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
594
594
  * Telemetry (D8): the durable record is the `package-events` store row;
595
595
  * this bus topic drives notifier rules + live UI. See
596
596
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -5376,7 +5376,7 @@ var ZodIssueCode = {
5376
5376
  var ZodFirstPartyTypeKind;
5377
5377
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5378
5378
  //#endregion
5379
- //#region ../types/dist/sleep-BnujYGPe.mjs
5379
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
5380
5380
  /**
5381
5381
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5382
5382
  * window to float samples (D455).
@@ -7522,7 +7522,7 @@ function errMsg(err) {
7522
7522
  if (typeof err === "string") return err;
7523
7523
  return String(err);
7524
7524
  }
7525
- new Set([
7525
+ var OWNER_TYPES = new Set([
7526
7526
  "track",
7527
7527
  "summary",
7528
7528
  "face",
@@ -7532,12 +7532,20 @@ new Set([
7532
7532
  "scene",
7533
7533
  "motion",
7534
7534
  "object",
7535
- "audio"
7535
+ "audio",
7536
+ "mosaic"
7536
7537
  ]);
7537
- /** Build a media key. The timestamp segment is omitted when there is none. */
7538
- function formatMediaOwnerKey(key) {
7539
- const head = `${key.ownerType}:${key.ownerId}:${key.fileKind}`;
7540
- return key.timestampMs === void 0 ? head : `${head}:${key.timestampMs}`;
7538
+ /**
7539
+ * Is this string a declared media owner type?
7540
+ *
7541
+ * Exported because the `event-media` plane's path parser needs it (D482): a
7542
+ * path segment is an arbitrary string until something narrows it, and a
7543
+ * hand-written list at the door would drift from {@link MEDIA_OWNER_TYPES} the
7544
+ * day an owner kind is added — the failure this module's own docblock already
7545
+ * records for `vehicle` and `scene`.
7546
+ */
7547
+ function isMediaOwnerType(value) {
7548
+ return OWNER_TYPES.has(value);
7541
7549
  }
7542
7550
  /**
7543
7551
  * The owner types that are event tables, in the order the event-media resolver
@@ -7549,7 +7557,21 @@ var EVENT_OWNER_TYPES = [
7549
7557
  "object",
7550
7558
  "audio"
7551
7559
  ];
7552
- new Set(EVENT_OWNER_TYPES);
7560
+ /**
7561
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
7562
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
7563
+ * `(table, id)`).
7564
+ *
7565
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
7566
+ * table would otherwise be accepted by the codec and refused at the door, with
7567
+ * nothing failing until a caller asked.
7568
+ */
7569
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7570
+ var EVENT_OWNER_TYPE_SET = new Set(EVENT_OWNER_TYPES);
7571
+ /** True when this key's owner is one of the three event tables. */
7572
+ function isEventOwnerType(ownerType) {
7573
+ return EVENT_OWNER_TYPE_SET.has(ownerType);
7574
+ }
7553
7575
  var EncodeProfileSchema = object({
7554
7576
  video: object({
7555
7577
  codec: _enum([
@@ -13153,6 +13175,16 @@ method(object({
13153
13175
  filter: QueryFilterSchema.optional(),
13154
13176
  columns: array(string()).readonly().optional()
13155
13177
  }), array(SettingsRecordSchema).readonly()), method(object({
13178
+ namespace: string().optional(),
13179
+ collection: string(),
13180
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
13181
+ * index on the collection. Never empty. */
13182
+ conflict: array(string()).readonly(),
13183
+ record: BulkRecordSchema
13184
+ }), object({
13185
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
13186
+ * row's own id on an update. */
13187
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
13156
13188
  namespace: string().optional(),
13157
13189
  collection: string(),
13158
13190
  record: object({
@@ -13287,6 +13319,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
13287
13319
  id: union([string(), number()]) }), {
13288
13320
  kind: "mutation",
13289
13321
  auth: "admin"
13322
+ }), method(object({
13323
+ namespace: string().optional(),
13324
+ collection: string(),
13325
+ conflict: array(string()).readonly(),
13326
+ record: BulkRecordSchema
13327
+ }), object({ id: union([string(), number()]) }), {
13328
+ kind: "mutation",
13329
+ auth: "admin"
13290
13330
  }), method(object({
13291
13331
  namespace: string().optional(),
13292
13332
  collection: string(),
@@ -20355,8 +20395,8 @@ var TrackPositionSchema = object({
20355
20395
  var TrackSnapshotSchema = object({
20356
20396
  timestamp: number(),
20357
20397
  position: TrackPositionSchema,
20358
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
20359
- mediaKey: string()
20398
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
20399
+ mediaId: number().int()
20360
20400
  });
20361
20401
  /**
20362
20402
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -20960,14 +21000,14 @@ var ObjectEventSchema = object({
20960
21000
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
20961
21001
  frameWidth: number().optional(),
20962
21002
  frameHeight: number().optional(),
20963
- /** MediaStore key for the crop attached to this event (if any). */
20964
- mediaKey: string().optional(),
20965
- /** Design B: MediaStore key of the track's native-resolution key frame (the
21003
+ /** Media row id of the crop attached to this event (if any) — D482. */
21004
+ mediaId: number().int().optional(),
21005
+ /** Design B: media row id of the track's native-resolution key frame (the
20966
21006
  * best-detection full frame). Resolve via the event-media data-plane
20967
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
21007
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
20968
21008
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
20969
- * sources — consumers fall back to `mediaKey` (the tight crop). */
20970
- keyFrameMediaKey: string().optional(),
21009
+ * sources — consumers fall back to `mediaId` (the tight crop). */
21010
+ keyFrameMediaId: number().int().optional(),
20971
21011
  /** Populated by B5 (recording playback URL for this event). */
20972
21012
  mediaUrl: string().optional(),
20973
21013
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -21017,7 +21057,7 @@ var MediaFileKindEnum = _enum([
21017
21057
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
21018
21058
  *
21019
21059
  * `url` points at the `event-media` data plane
21020
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
21060
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
21021
21061
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
21022
21062
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
21023
21063
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -21025,10 +21065,13 @@ var MediaFileKindEnum = _enum([
21025
21065
  * `data-plane-access.ts` for the rule and the one gap it does not close
21026
21066
  * (per-device scoping).
21027
21067
  *
21028
- * The URL is built from the row's **stored** key, which is not always its
21029
- * published `kind`: a track's face/plate crop is stored as `crop` under
21068
+ * The URL is built from the row's own id, which since D482 says nothing about
21069
+ * the row's owner or kind and that is the point. The published `kind` is not
21070
+ * the stored one (a track's face/plate crop is stored as `crop` under
21030
21071
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
21031
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
21072
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
21073
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
21074
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
21032
21075
  *
21033
21076
  * ## `base64` is TRANSITIONAL and is going away
21034
21077
  *
@@ -21041,7 +21084,19 @@ var MediaFileKindEnum = _enum([
21041
21084
  * `analytics-query-facade.ts`; nothing else reads it.
21042
21085
  */
21043
21086
  var MediaFileSchema = object({
21044
- key: string(),
21087
+ /**
21088
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
21089
+ *
21090
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
21091
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
21092
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
21093
+ * different rows that spell the same number, and a track whose
21094
+ * `bestEventId` was an object event was served a motion event's snapshot —
21095
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
21096
+ * surrogate id cannot name the wrong row's owner, because it names no owner
21097
+ * at all.
21098
+ */
21099
+ mediaId: number().int(),
21045
21100
  kind: MediaFileKindEnum,
21046
21101
  sizeBytes: number(),
21047
21102
  timestamp: number()
@@ -21149,7 +21204,7 @@ var RetrainTrackSchema = object({
21149
21204
  });
21150
21205
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
21151
21206
  var RetrainFrameCandidateSchema = object({
21152
- mediaKey: string(),
21207
+ mediaId: number().int(),
21153
21208
  kind: MediaFileKindEnum,
21154
21209
  timestamp: number(),
21155
21210
  sizeBytes: number().int(),
@@ -21163,7 +21218,7 @@ var RetrainFrameSchema = object({
21163
21218
  deviceId: number(),
21164
21219
  trackId: string(),
21165
21220
  /** Provenance only. It may already point at nothing — that is expected. */
21166
- sourceMediaKey: string(),
21221
+ sourceMediaId: number().int(),
21167
21222
  sourceKind: MediaFileKindEnum,
21168
21223
  sizeBytes: number().int(),
21169
21224
  width: number().int(),
@@ -21179,7 +21234,7 @@ var RetrainCopyRefusalSchema = _enum([
21179
21234
  var RetrainFrameSelectionSchema = object({
21180
21235
  copied: array(RetrainFrameSchema).readonly(),
21181
21236
  refused: array(object({
21182
- sourceMediaKey: string(),
21237
+ sourceMediaId: number().int(),
21183
21238
  reason: RetrainCopyRefusalSchema
21184
21239
  })).readonly()
21185
21240
  });
@@ -21187,7 +21242,7 @@ var RetrainFrameListSchema = object({
21187
21242
  candidates: array(RetrainFrameCandidateSchema).readonly(),
21188
21243
  copies: array(RetrainFrameSchema).readonly(),
21189
21244
  /** What the page pre-selects — the native key frame when one survives. */
21190
- autoPickMediaKey: string().optional()
21245
+ autoPickMediaId: number().int().optional()
21191
21246
  });
21192
21247
  /** What the operator asked the assist to look for. */
21193
21248
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -21282,9 +21337,11 @@ var RecentTracksQueryInput = object({
21282
21337
  });
21283
21338
  /**
21284
21339
  * A Summary (D359): the per-camera session envelope that references tracks.
21285
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
21286
- * served by the event-media plane by key), null until the first frame with a
21287
- * member visible has been materialised.
21340
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
21341
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
21342
+ * first frame with a member visible has been materialised (D482 — it was the
21343
+ * row's composite key, which embedded the owner and could name another table's
21344
+ * row once event ids became per-table rowids).
21288
21345
  */
21289
21346
  var SummarySchema = object({
21290
21347
  id: string(),
@@ -21293,7 +21350,7 @@ var SummarySchema = object({
21293
21350
  lastActiveAt: number(),
21294
21351
  sealedAt: number().nullable(),
21295
21352
  memberCount: number().int().nonnegative(),
21296
- groupShotKey: string().nullable()
21353
+ groupShotMediaId: number().int().nullable()
21297
21354
  });
21298
21355
  var SummariesQueryInput = object({
21299
21356
  deviceIds: array(number()).min(1),
@@ -22276,7 +22333,7 @@ var pipelineAnalyticsCapability = {
22276
22333
  selectRetrainFrames: method(object({
22277
22334
  deviceId: number(),
22278
22335
  trackId: string(),
22279
- mediaKeys: array(string()).min(1)
22336
+ mediaIds: array(number().int()).min(1)
22280
22337
  }), RetrainFrameSelectionSchema, {
22281
22338
  kind: "mutation",
22282
22339
  auth: "admin"
@@ -22440,8 +22497,29 @@ var pipelineAnalyticsCapability = {
22440
22497
  kind: "query",
22441
22498
  auth: "admin"
22442
22499
  }),
22500
+ /**
22501
+ * The media an EVENT owns.
22502
+ *
22503
+ * `ownerType` is REQUIRED, and that is the whole correction (D482). An
22504
+ * event is a row in ONE of three tables, and since D474 each numbers from
22505
+ * 1 independently: `motion:101314` and `object:101314` both exist. This
22506
+ * method took a bare `eventId` and the provider probed motion → object →
22507
+ * audio, stopping at the first hit — so on the live hub, where object
22508
+ * events own no media of their own and 299 883 of 300 559 media rows are
22509
+ * motion-owned, EVERY object event resolved to its motion namesake. A
22510
+ * track from 17:34 on camera 615 was served a snapshot from 22:35 eleven
22511
+ * days earlier, silently.
22512
+ *
22513
+ * D476 had already disambiguated the KEY (`motion:` vs `object:`); this is
22514
+ * the API catching up to it. Naming the table is not a "qualification" of
22515
+ * the ambiguity — a listing BY OWNER has no address to make surrogate: the
22516
+ * owner IS (table, id), and half of it is not a question.
22517
+ */
22443
22518
  getEventMedia: method(object({
22444
- eventId: string(),
22519
+ /** Which of the three event tables owns the row. */
22520
+ ownerType: EventOwnerTypeSchema,
22521
+ /** The event's rowid in that table (D474: an event id is a number). */
22522
+ eventId: number().int(),
22445
22523
  kind: MediaFileKindEnum.optional(),
22446
22524
  deviceId: number()
22447
22525
  }), array(MediaFileSchema).readonly()),
@@ -22486,11 +22564,14 @@ var pipelineAnalyticsCapability = {
22486
22564
  * the live hub: one event's `fullFrameBoxed` is 2 824 077 B, base64'd to
22487
22565
  * ~3.8 MB, allocated whole in hub-main's heap, for a list of keys.
22488
22566
  *
22489
- * Same `deviceId` authorization subject as `getEventMedia`, and the same
22490
- * rows this is a projection of that method, never a different question.
22567
+ * Same `deviceId` authorization subject as `getEventMedia`, the same
22568
+ * REQUIRED `ownerType` (read that method's docblock for the night-time
22569
+ * thumbnail this closes — D482), and the same rows: this is a projection
22570
+ * of that method, never a different question.
22491
22571
  */
22492
22572
  listEventMedia: method(object({
22493
- eventId: string(),
22573
+ ownerType: EventOwnerTypeSchema,
22574
+ eventId: number().int(),
22494
22575
  deviceId: number()
22495
22576
  }), array(MediaFileInfoSchema).readonly()),
22496
22577
  /**
@@ -27778,8 +27859,8 @@ var IdentitySchema = object({
27778
27859
  id: string(),
27779
27860
  name: string(),
27780
27861
  sampleCount: number().int().nonnegative(),
27781
- coverMediaKey: string().optional(),
27782
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
27862
+ coverMediaId: number().int().optional(),
27863
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
27783
27864
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
27784
27865
  coverBase64: string().optional()
27785
27866
  });
@@ -27805,8 +27886,8 @@ var IdentitySampleAuditRowSchema = object({
27805
27886
  enrolledAt: number().int(),
27806
27887
  deviceId: number().int().optional(),
27807
27888
  source: _enum(["detected", "photo"]),
27808
- /** The enrolled crop's media key, so the panel can show the evidence. */
27809
- mediaKey: string().optional(),
27889
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
27890
+ mediaId: number().int().optional(),
27810
27891
  /**
27811
27892
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
27812
27893
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -27875,15 +27956,15 @@ var FaceInfoSchema = object({
27875
27956
  */
27876
27957
  cropUrl: string().optional(),
27877
27958
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
27878
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
27959
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
27879
27960
  * legacy rows written before design B. */
27880
27961
  faceBbox: BoundingBoxSchema.optional(),
27881
27962
  /** Design B: MediaStore key of the track's native-resolution key frame.
27882
27963
  * Fetch the native JPEG via the event-media data-plane
27883
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
27964
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
27884
27965
  * track produced no key frame (e.g. native/onboard source) — the UI falls
27885
27966
  * back to the inline `base64` face crop. */
27886
- keyFrameMediaKey: string().optional(),
27967
+ keyFrameMediaId: number().int().optional(),
27887
27968
  /** Winning identity-match cosine (0..1) for this face's track, when an
27888
27969
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
27889
27970
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -27952,11 +28033,14 @@ var FaceClusterSchema = object({
27952
28033
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
27953
28034
  * dialog already rendering its key FRAME from the `event-media` plane.
27954
28035
  *
27955
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
27956
- * media key directly, so this needed no new plane and no new access decision.
28036
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
28037
+ * resolves a media row by its own id, so this needed no new plane and no new
28038
+ * access decision.
27957
28039
  */
27958
28040
  var MediaFileLiteSchema$1 = object({
27959
- key: string(),
28041
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
28042
+ * (D482). It was the row's composite key, which embedded the owner. */
28043
+ mediaId: number().int(),
27960
28044
  kind: string(),
27961
28045
  url: string(),
27962
28046
  sizeBytes: number(),
@@ -27978,7 +28062,7 @@ var faceGalleryCapability = {
27978
28062
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
27979
28063
  * four times and the viewer holds at `staleTime: 30_000`.
27980
28064
  *
27981
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
28065
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
27982
28066
  * the `event-media` plane serves that key `immutable` with an ETag.
27983
28067
  *
27984
28068
  * **This is an INPUT field, so it does not reach the addon until the
@@ -31400,8 +31484,8 @@ var VehicleSchema = object({
31400
31484
  id: string(),
31401
31485
  name: string(),
31402
31486
  sampleCount: number().int().nonnegative(),
31403
- coverMediaKey: string().optional(),
31404
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
31487
+ coverMediaId: number().int().optional(),
31488
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
31405
31489
  coverBase64: string().optional()
31406
31490
  });
31407
31491
  var VehicleSampleInfoSchema = object({
@@ -31434,7 +31518,7 @@ var PlateInfoSchema = object({
31434
31518
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
31435
31519
  plateBbox: BoundingBoxSchema.optional(),
31436
31520
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
31437
- keyFrameMediaKey: string().optional(),
31521
+ keyFrameMediaId: number().int().optional(),
31438
31522
  base64: string().optional(),
31439
31523
  /**
31440
31524
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -31455,11 +31539,14 @@ var PlateInfoSchema = object({
31455
31539
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
31456
31540
  * dialog already rendering its key FRAME from the `event-media` plane.
31457
31541
  *
31458
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
31459
- * media key directly, so this needed no new plane and no new access decision.
31542
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
31543
+ * resolves a media row by its own id, so this needed no new plane and no new
31544
+ * access decision.
31460
31545
  */
31461
31546
  var MediaFileLiteSchema = object({
31462
- key: string(),
31547
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
31548
+ * (D482). It was the row's composite key, which embedded the owner. */
31549
+ mediaId: number().int(),
31463
31550
  kind: string(),
31464
31551
  url: string(),
31465
31552
  sizeBytes: number(),
@@ -31541,7 +31628,7 @@ var plateGalleryCapability = {
31541
31628
  listVehicles: method(object({
31542
31629
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
31543
31630
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
31544
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
31631
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
31545
31632
  * INPUT field: stripped by the hub router until the train ships, which
31546
31633
  * resolves to `false` and is exactly the intended default. */
31547
31634
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()),
@@ -33145,7 +33232,14 @@ var SceneReferenceSchema = object({
33145
33232
  modelId: string(),
33146
33233
  condition: SceneConditionSchema,
33147
33234
  capturedAt: number(),
33148
- thumbnailMediaId: string().optional(),
33235
+ /**
33236
+ * The reference thumbnail's media ROW id (D482).
33237
+ *
33238
+ * The name already said `mediaId` while the value was the row's composite
33239
+ * key — a leftover that read as done and was not. It is the row's own id
33240
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
33241
+ */
33242
+ thumbnailMediaId: number().int().optional(),
33149
33243
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
33150
33244
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
33151
33245
  * normalized rect frame a different piece of world, and the scene would
@@ -35130,7 +35224,7 @@ var StationaryObjectSchema = object({
35130
35224
  /** Enrichment label carried from the source track (identity / plate). */
35131
35225
  label: string().optional(),
35132
35226
  /** Native-resolution key-frame media key for the parked object's best image. */
35133
- keyFrameMediaKey: string().optional()
35227
+ keyFrameMediaId: number().int().optional()
35134
35228
  });
35135
35229
  var CameraOccupancySnapshotSchema = object({
35136
35230
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -37644,6 +37738,12 @@ Object.freeze({
37644
37738
  addonId: null,
37645
37739
  access: "create"
37646
37740
  },
37741
+ "dataStoreProvider.upsert": {
37742
+ capName: "data-store-provider",
37743
+ capScope: "system",
37744
+ addonId: null,
37745
+ access: "create"
37746
+ },
37647
37747
  "dayNight.getOptions": {
37648
37748
  capName: "day-night",
37649
37749
  capScope: "device",
@@ -41508,6 +41608,12 @@ Object.freeze({
41508
41608
  addonId: null,
41509
41609
  access: "create"
41510
41610
  },
41611
+ "settingsStore.upsert": {
41612
+ capName: "settings-store",
41613
+ capScope: "system",
41614
+ addonId: null,
41615
+ access: "create"
41616
+ },
41511
41617
  "smtpProvider.getStatus": {
41512
41618
  capName: "smtp-provider",
41513
41619
  capScope: "system",
@@ -46366,12 +46472,6 @@ Object.defineProperty(exports, "failureContributionCapability", {
46366
46472
  return failureContributionCapability;
46367
46473
  }
46368
46474
  });
46369
- Object.defineProperty(exports, "formatMediaOwnerKey", {
46370
- enumerable: true,
46371
- get: function() {
46372
- return formatMediaOwnerKey;
46373
- }
46374
- });
46375
46475
  Object.defineProperty(exports, "hfModelUrl", {
46376
46476
  enumerable: true,
46377
46477
  get: function() {
@@ -46396,6 +46496,18 @@ Object.defineProperty(exports, "isDeviceScopedCap", {
46396
46496
  return isDeviceScopedCap;
46397
46497
  }
46398
46498
  });
46499
+ Object.defineProperty(exports, "isEventOwnerType", {
46500
+ enumerable: true,
46501
+ get: function() {
46502
+ return isEventOwnerType;
46503
+ }
46504
+ });
46505
+ Object.defineProperty(exports, "isMediaOwnerType", {
46506
+ enumerable: true,
46507
+ get: function() {
46508
+ return isMediaOwnerType;
46509
+ }
46510
+ });
46399
46511
  Object.defineProperty(exports, "isScheduleActive", {
46400
46512
  enumerable: true,
46401
46513
  get: function() {