@camstack/addon-model-studio 1.1.128 → 1.1.129

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 (18) hide show
  1. package/dist/{MotionZonesSettings-Y4BOcwCT.mjs → MotionZonesSettings-C0ZZHN5q.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-D0dMH34n.mjs → PrivacyMaskSettings-D4uGl7zT.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-iS9jtSJq.mjs → SceneMonitorEditor-BKYzMLFb.mjs} +258 -255
  4. package/dist/_stub.js +10 -10
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DStSHZb_.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CS5tkis3.mjs} +4 -4
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CXCz80XV.mjs +26 -0
  7. package/dist/{hostInit-s1JYi2jS.mjs → hostInit-BtQKjmWv.mjs} +3 -3
  8. package/dist/model-studio.addon.js +131 -50
  9. package/dist/model-studio.addon.mjs +131 -50
  10. package/dist/{player-overlays-q0vtmqkn.mjs → player-overlays-CMrYqFCL.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-DNXbYsNH.mjs → responsive-JVBuLbSa.mjs} +3 -3
  13. package/dist/{square-CvCVejCK.mjs → square-BCP4gOno.mjs} +1 -1
  14. package/dist/{trash-2-pcumgheo.mjs → trash-2-CeqN21XB.mjs} +1 -1
  15. package/dist/{use-device-snapshot-BKYQa7fa.mjs → use-device-snapshot-UOdeTQpP.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CNgFCxL8.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C_r2F6t8.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CO-CV0SJ.mjs +0 -26
@@ -523,7 +523,7 @@ async function importScryptedCatalogModel(input, deps) {
523
523
  }
524
524
  }
525
525
  //#endregion
526
- //#region ../types/dist/event-category-DAXzJeTX.mjs
526
+ //#region ../types/dist/event-category-ZyX6jcse.mjs
527
527
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
528
528
  EventCategory["SystemBoot"] = "system.boot";
529
529
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -1084,7 +1084,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
1084
1084
  * a package zone — a newly-appeared stationary object of a package class
1085
1085
  * that cleared the class / zone / dwell / size gates. Payload:
1086
1086
  * `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
1087
- * entryId, className, zoneIds, keyFrameMediaKey?, bbox, timestamp }`.
1087
+ * entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
1088
1088
  * Telemetry (D8): the durable record is the `package-events` store row;
1089
1089
  * this bus topic drives notifier rules + live UI. See
1090
1090
  * docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
@@ -5870,7 +5870,7 @@ var ZodIssueCode = {
5870
5870
  var ZodFirstPartyTypeKind;
5871
5871
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5872
5872
  //#endregion
5873
- //#region ../types/dist/sleep-BnujYGPe.mjs
5873
+ //#region ../types/dist/sleep-CnLyvg3w.mjs
5874
5874
  /**
5875
5875
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5876
5876
  * window to float samples (D455).
@@ -7880,13 +7880,30 @@ new Set([
7880
7880
  "scene",
7881
7881
  "motion",
7882
7882
  "object",
7883
- "audio"
7883
+ "audio",
7884
+ "mosaic"
7884
7885
  ]);
7885
- new Set([
7886
+ /**
7887
+ * The owner types that are event tables, in the order the event-media resolver
7888
+ * should consider them. Exported so a consumer asking "is this key an event?"
7889
+ * does not re-spell the list and drift from it.
7890
+ */
7891
+ var EVENT_OWNER_TYPES = [
7886
7892
  "motion",
7887
7893
  "object",
7888
7894
  "audio"
7889
- ]);
7895
+ ];
7896
+ /**
7897
+ * The same list as a Zod enum, for the cap inputs that must NAME the table
7898
+ * (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
7899
+ * `(table, id)`).
7900
+ *
7901
+ * Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
7902
+ * table would otherwise be accepted by the codec and refused at the door, with
7903
+ * nothing failing until a caller asked.
7904
+ */
7905
+ var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7906
+ new Set(EVENT_OWNER_TYPES);
7890
7907
  var EncodeProfileSchema = object({
7891
7908
  video: object({
7892
7909
  codec: _enum([
@@ -13039,6 +13056,16 @@ method(object({
13039
13056
  filter: QueryFilterSchema.optional(),
13040
13057
  columns: array(string()).readonly().optional()
13041
13058
  }), array(SettingsRecordSchema).readonly()), method(object({
13059
+ namespace: string().optional(),
13060
+ collection: string(),
13061
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
13062
+ * index on the collection. Never empty. */
13063
+ conflict: array(string()).readonly(),
13064
+ record: BulkRecordSchema
13065
+ }), object({
13066
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
13067
+ * row's own id on an update. */
13068
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
13042
13069
  namespace: string().optional(),
13043
13070
  collection: string(),
13044
13071
  record: object({
@@ -13173,6 +13200,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
13173
13200
  id: union([string(), number()]) }), {
13174
13201
  kind: "mutation",
13175
13202
  auth: "admin"
13203
+ }), method(object({
13204
+ namespace: string().optional(),
13205
+ collection: string(),
13206
+ conflict: array(string()).readonly(),
13207
+ record: BulkRecordSchema
13208
+ }), object({ id: union([string(), number()]) }), {
13209
+ kind: "mutation",
13210
+ auth: "admin"
13176
13211
  }), method(object({
13177
13212
  namespace: string().optional(),
13178
13213
  collection: string(),
@@ -19395,8 +19430,8 @@ var TrackPositionSchema = object({
19395
19430
  var TrackSnapshotSchema = object({
19396
19431
  timestamp: number(),
19397
19432
  position: TrackPositionSchema,
19398
- /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
19399
- mediaKey: string()
19433
+ /** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
19434
+ mediaId: number().int()
19400
19435
  });
19401
19436
  /**
19402
19437
  * Normalized 0..1 trajectory envelope (min/max over every position bbox,
@@ -20000,14 +20035,14 @@ var ObjectEventSchema = object({
20000
20035
  * pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
20001
20036
  frameWidth: number().optional(),
20002
20037
  frameHeight: number().optional(),
20003
- /** MediaStore key for the crop attached to this event (if any). */
20004
- mediaKey: string().optional(),
20005
- /** Design B: MediaStore key of the track's native-resolution key frame (the
20038
+ /** Media row id of the crop attached to this event (if any) — D482. */
20039
+ mediaId: number().int().optional(),
20040
+ /** Design B: media row id of the track's native-resolution key frame (the
20006
20041
  * best-detection full frame). Resolve via the event-media data-plane
20007
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
20042
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
20008
20043
  * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
20009
- * sources — consumers fall back to `mediaKey` (the tight crop). */
20010
- keyFrameMediaKey: string().optional(),
20044
+ * sources — consumers fall back to `mediaId` (the tight crop). */
20045
+ keyFrameMediaId: number().int().optional(),
20011
20046
  /** Populated by B5 (recording playback URL for this event). */
20012
20047
  mediaUrl: string().optional(),
20013
20048
  /** The parent track's key-event importance [0,1], propagated to every object
@@ -20057,7 +20092,7 @@ var MediaFileKindEnum = _enum([
20057
20092
  * hub-main's heap on the way past — for an `<img>` that would have cached it.
20058
20093
  *
20059
20094
  * `url` points at the `event-media` data plane
20060
- * (`/addon/<addonId>/event-media/<storedKey>`), which serves the same blob
20095
+ * (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
20061
20096
  * with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
20062
20097
  * render a `?variant=thumb`, and streams. The hub gate in front of it requires
20063
20098
  * a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
@@ -20065,10 +20100,13 @@ var MediaFileKindEnum = _enum([
20065
20100
  * `data-plane-access.ts` for the rule and the one gap it does not close
20066
20101
  * (per-device scoping).
20067
20102
  *
20068
- * The URL is built from the row's **stored** key, which is not always its
20069
- * published `kind`: a track's face/plate crop is stored as `crop` under
20103
+ * The URL is built from the row's own id, which since D482 says nothing about
20104
+ * the row's owner or kind and that is the point. The published `kind` is not
20105
+ * the stored one (a track's face/plate crop is stored as `crop` under
20070
20106
  * `('face'|'plate', '<prefix>-<trackId>')` and published as
20071
- * `faceCrop`/`plateCrop`. `MediaStore.getByKey` knows only the stored key.
20107
+ * `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
20108
+ * taken from `row.key` verbatim or it 404'd exactly those two rows. An id
20109
+ * cannot be mis-reconstructed, because there is nothing in it to reconstruct.
20072
20110
  *
20073
20111
  * ## `base64` is TRANSITIONAL and is going away
20074
20112
  *
@@ -20081,7 +20119,19 @@ var MediaFileKindEnum = _enum([
20081
20119
  * `analytics-query-facade.ts`; nothing else reads it.
20082
20120
  */
20083
20121
  var MediaFileSchema = object({
20084
- key: string(),
20122
+ /**
20123
+ * The media row's OWN id — the rowid SQLite assigned it (D482).
20124
+ *
20125
+ * It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
20126
+ * [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
20127
+ * per-table rowid aliases, so `object:101314` and `motion:101314` are two
20128
+ * different rows that spell the same number, and a track whose
20129
+ * `bestEventId` was an object event was served a motion event's snapshot —
20130
+ * a night-time thumbnail on an afternoon track, with no error anywhere. A
20131
+ * surrogate id cannot name the wrong row's owner, because it names no owner
20132
+ * at all.
20133
+ */
20134
+ mediaId: number().int(),
20085
20135
  kind: MediaFileKindEnum,
20086
20136
  sizeBytes: number(),
20087
20137
  timestamp: number()
@@ -20189,7 +20239,7 @@ var RetrainTrackSchema = object({
20189
20239
  });
20190
20240
  /** A frame the picker may offer — an index row, no blob was read to produce it. */
20191
20241
  var RetrainFrameCandidateSchema = object({
20192
- mediaKey: string(),
20242
+ mediaId: number().int(),
20193
20243
  kind: MediaFileKindEnum,
20194
20244
  timestamp: number(),
20195
20245
  sizeBytes: number().int(),
@@ -20203,7 +20253,7 @@ var RetrainFrameSchema = object({
20203
20253
  deviceId: number(),
20204
20254
  trackId: string(),
20205
20255
  /** Provenance only. It may already point at nothing — that is expected. */
20206
- sourceMediaKey: string(),
20256
+ sourceMediaId: number().int(),
20207
20257
  sourceKind: MediaFileKindEnum,
20208
20258
  sizeBytes: number().int(),
20209
20259
  width: number().int(),
@@ -20219,7 +20269,7 @@ var RetrainCopyRefusalSchema = _enum([
20219
20269
  var RetrainFrameSelectionSchema = object({
20220
20270
  copied: array(RetrainFrameSchema).readonly(),
20221
20271
  refused: array(object({
20222
- sourceMediaKey: string(),
20272
+ sourceMediaId: number().int(),
20223
20273
  reason: RetrainCopyRefusalSchema
20224
20274
  })).readonly()
20225
20275
  });
@@ -20227,7 +20277,7 @@ var RetrainFrameListSchema = object({
20227
20277
  candidates: array(RetrainFrameCandidateSchema).readonly(),
20228
20278
  copies: array(RetrainFrameSchema).readonly(),
20229
20279
  /** What the page pre-selects — the native key frame when one survives. */
20230
- autoPickMediaKey: string().optional()
20280
+ autoPickMediaId: number().int().optional()
20231
20281
  });
20232
20282
  /** What the operator asked the assist to look for. */
20233
20283
  var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
@@ -20322,9 +20372,11 @@ var RecentTracksQueryInput = object({
20322
20372
  });
20323
20373
  /**
20324
20374
  * A Summary (D359): the per-camera session envelope that references tracks.
20325
- * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
20326
- * served by the event-media plane by key), null until the first frame with a
20327
- * member visible has been materialised.
20375
+ * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
20376
+ * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
20377
+ * first frame with a member visible has been materialised (D482 — it was the
20378
+ * row's composite key, which embedded the owner and could name another table's
20379
+ * row once event ids became per-table rowids).
20328
20380
  */
20329
20381
  var SummarySchema = object({
20330
20382
  id: string(),
@@ -20333,7 +20385,7 @@ var SummarySchema = object({
20333
20385
  lastActiveAt: number(),
20334
20386
  sealedAt: number().nullable(),
20335
20387
  memberCount: number().int().nonnegative(),
20336
- groupShotKey: string().nullable()
20388
+ groupShotMediaId: number().int().nullable()
20337
20389
  });
20338
20390
  var SummariesQueryInput = object({
20339
20391
  deviceIds: array(number()).min(1),
@@ -20887,7 +20939,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20887
20939
  }), method(object({
20888
20940
  deviceId: number(),
20889
20941
  trackId: string(),
20890
- mediaKeys: array(string()).min(1)
20942
+ mediaIds: array(number().int()).min(1)
20891
20943
  }), RetrainFrameSelectionSchema, {
20892
20944
  kind: "mutation",
20893
20945
  auth: "admin"
@@ -20955,7 +21007,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20955
21007
  kind: "query",
20956
21008
  auth: "admin"
20957
21009
  }), method(object({
20958
- eventId: string(),
21010
+ /** Which of the three event tables owns the row. */
21011
+ ownerType: EventOwnerTypeSchema,
21012
+ /** The event's rowid in that table (D474: an event id is a number). */
21013
+ eventId: number().int(),
20959
21014
  kind: MediaFileKindEnum.optional(),
20960
21015
  deviceId: number()
20961
21016
  }), array(MediaFileSchema).readonly()), method(object({
@@ -20966,7 +21021,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20966
21021
  trackId: string(),
20967
21022
  deviceId: number()
20968
21023
  }), array(MediaFileInfoSchema).readonly()), method(object({
20969
- eventId: string(),
21024
+ ownerType: EventOwnerTypeSchema,
21025
+ eventId: number().int(),
20970
21026
  deviceId: number()
20971
21027
  }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
20972
21028
  kind: "mutation",
@@ -25429,8 +25485,8 @@ var IdentitySchema = object({
25429
25485
  id: string(),
25430
25486
  name: string(),
25431
25487
  sampleCount: number().int().nonnegative(),
25432
- coverMediaKey: string().optional(),
25433
- /** Inline base64 of the cover sample's crop, resolved from `coverMediaKey`.
25488
+ coverMediaId: number().int().optional(),
25489
+ /** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
25434
25490
  * Lets the UI render the person's face avatar instead of a placeholder icon. */
25435
25491
  coverBase64: string().optional()
25436
25492
  });
@@ -25456,8 +25512,8 @@ var IdentitySampleAuditRowSchema = object({
25456
25512
  enrolledAt: number().int(),
25457
25513
  deviceId: number().int().optional(),
25458
25514
  source: _enum(["detected", "photo"]),
25459
- /** The enrolled crop's media key, so the panel can show the evidence. */
25460
- mediaKey: string().optional(),
25515
+ /** The enrolled crop's media row id, so the panel can show the evidence. */
25516
+ mediaId: number().int().optional(),
25461
25517
  /**
25462
25518
  * False = the sample is stamped with a DIFFERENT face model, and a cosine
25463
25519
  * across feature spaces is a well-formed float with no meaning. Every number
@@ -25526,15 +25582,15 @@ var FaceInfoSchema = object({
25526
25582
  */
25527
25583
  cropUrl: string().optional(),
25528
25584
  /** Design B: the face bbox (pixel space) on the key frame — lets a detail
25529
- * view draw the box over the native `keyFrameMediaKey` frame. Absent on
25585
+ * view draw the box over the native `keyFrameMediaId` frame. Absent on
25530
25586
  * legacy rows written before design B. */
25531
25587
  faceBbox: BoundingBoxSchema.optional(),
25532
25588
  /** Design B: MediaStore key of the track's native-resolution key frame.
25533
25589
  * Fetch the native JPEG via the event-media data-plane
25534
- * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
25590
+ * (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
25535
25591
  * track produced no key frame (e.g. native/onboard source) — the UI falls
25536
25592
  * back to the inline `base64` face crop. */
25537
- keyFrameMediaKey: string().optional(),
25593
+ keyFrameMediaId: number().int().optional(),
25538
25594
  /** Winning identity-match cosine (0..1) for this face's track, when an
25539
25595
  * identity was auto-confirmed. Lets the UI surface WHY a face was assigned
25540
25596
  * (confidence badge / low-confidence audit). Absent on legacy rows and on
@@ -25603,11 +25659,14 @@ var FaceClusterSchema = object({
25603
25659
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
25604
25660
  * dialog already rendering its key FRAME from the `event-media` plane.
25605
25661
  *
25606
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
25607
- * media key directly, so this needed no new plane and no new access decision.
25662
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
25663
+ * resolves a media row by its own id, so this needed no new plane and no new
25664
+ * access decision.
25608
25665
  */
25609
25666
  var MediaFileLiteSchema$1 = object({
25610
- key: string(),
25667
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
25668
+ * (D482). It was the row's composite key, which embedded the owner. */
25669
+ mediaId: number().int(),
25611
25670
  kind: string(),
25612
25671
  url: string(),
25613
25672
  sizeBytes: number(),
@@ -25624,7 +25683,7 @@ method(object({
25624
25683
  * covers inline, ~10 KB of base64 per row, on a query this UI mounts
25625
25684
  * four times and the viewer holds at `staleTime: 30_000`.
25626
25685
  *
25627
- * Nothing loses its avatar: `coverMediaKey` is already on every row and
25686
+ * Nothing loses its avatar: `coverMediaId` is already on every row and
25628
25687
  * the `event-media` plane serves that key `immutable` with an ETag.
25629
25688
  *
25630
25689
  * **This is an INPUT field, so it does not reach the addon until the
@@ -28092,8 +28151,8 @@ var VehicleSchema = object({
28092
28151
  id: string(),
28093
28152
  name: string(),
28094
28153
  sampleCount: number().int().nonnegative(),
28095
- coverMediaKey: string().optional(),
28096
- /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
28154
+ coverMediaId: number().int().optional(),
28155
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
28097
28156
  coverBase64: string().optional()
28098
28157
  });
28099
28158
  var VehicleSampleInfoSchema = object({
@@ -28126,7 +28185,7 @@ var PlateInfoSchema = object({
28126
28185
  /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
28127
28186
  plateBbox: BoundingBoxSchema.optional(),
28128
28187
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
28129
- keyFrameMediaKey: string().optional(),
28188
+ keyFrameMediaId: number().int().optional(),
28130
28189
  base64: string().optional(),
28131
28190
  /**
28132
28191
  * Same crop as a data-plane URL, always present when the plate has a stored
@@ -28147,11 +28206,14 @@ var PlateInfoSchema = object({
28147
28206
  * `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
28148
28207
  * dialog already rendering its key FRAME from the `event-media` plane.
28149
28208
  *
28150
- * `url` is `/addon/<addonId>/event-media/<encoded key>`. The plane resolves a
28151
- * media key directly, so this needed no new plane and no new access decision.
28209
+ * `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
28210
+ * resolves a media row by its own id, so this needed no new plane and no new
28211
+ * access decision.
28152
28212
  */
28153
28213
  var MediaFileLiteSchema = object({
28154
- key: string(),
28214
+ /** The media row's own id — the same address `MediaFileRef.mediaId` carries
28215
+ * (D482). It was the row's composite key, which embedded the owner. */
28216
+ mediaId: number().int(),
28155
28217
  kind: string(),
28156
28218
  url: string(),
28157
28219
  sizeBytes: number(),
@@ -28210,7 +28272,7 @@ method(object({
28210
28272
  }), method(object({
28211
28273
  /** Inline {@link VehicleSchema.coverBase64} on every row. Default
28212
28274
  * `false` — the vehicle twin of `faceGallery.listIdentities`'s
28213
- * option; `coverMediaKey` + the `event-media` plane carry the picture.
28275
+ * option; `coverMediaId` + the `event-media` plane carry the picture.
28214
28276
  * INPUT field: stripped by the hub router until the train ships, which
28215
28277
  * resolves to `false` and is exactly the intended default. */
28216
28278
  includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
@@ -29534,7 +29596,14 @@ var SceneReferenceSchema = object({
29534
29596
  modelId: string(),
29535
29597
  condition: SceneConditionSchema,
29536
29598
  capturedAt: number(),
29537
- thumbnailMediaId: string().optional(),
29599
+ /**
29600
+ * The reference thumbnail's media ROW id (D482).
29601
+ *
29602
+ * The name already said `mediaId` while the value was the row's composite
29603
+ * key — a leftover that read as done and was not. It is the row's own id
29604
+ * now, addressed at `/addon/<addonId>/event-media/m/<id>`.
29605
+ */
29606
+ thumbnailMediaId: number().int().optional(),
29538
29607
  /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
29539
29608
  * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
29540
29609
  * normalized rect frame a different piece of world, and the scene would
@@ -30982,7 +31051,7 @@ var StationaryObjectSchema = object({
30982
31051
  /** Enrichment label carried from the source track (identity / plate). */
30983
31052
  label: string().optional(),
30984
31053
  /** Native-resolution key-frame media key for the parked object's best image. */
30985
- keyFrameMediaKey: string().optional()
31054
+ keyFrameMediaId: number().int().optional()
30986
31055
  });
30987
31056
  var CameraOccupancySnapshotSchema = object({
30988
31057
  /** Frame timestamp of the inference result that produced this snapshot. */
@@ -32138,6 +32207,12 @@ Object.freeze({
32138
32207
  addonId: null,
32139
32208
  access: "create"
32140
32209
  },
32210
+ "dataStoreProvider.upsert": {
32211
+ capName: "data-store-provider",
32212
+ capScope: "system",
32213
+ addonId: null,
32214
+ access: "create"
32215
+ },
32141
32216
  "dayNight.getOptions": {
32142
32217
  capName: "day-night",
32143
32218
  capScope: "device",
@@ -36002,6 +36077,12 @@ Object.freeze({
36002
36077
  addonId: null,
36003
36078
  access: "create"
36004
36079
  },
36080
+ "settingsStore.upsert": {
36081
+ capName: "settings-store",
36082
+ capScope: "system",
36083
+ addonId: null,
36084
+ access: "create"
36085
+ },
36005
36086
  "smtpProvider.getStatus": {
36006
36087
  capName: "smtp-provider",
36007
36088
  capScope: "system",