@camstack/addon-terminal 0.1.104 → 0.1.105
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.
- package/dist/addon.js +131 -50
- package/dist/addon.mjs +131 -50
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -31,7 +31,7 @@ let node_module = require("node:module");
|
|
|
31
31
|
let sharp = require("sharp");
|
|
32
32
|
sharp = __toESM(sharp);
|
|
33
33
|
let node_http = require("node:http");
|
|
34
|
-
//#region ../types/dist/event-category-
|
|
34
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
35
35
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
36
36
|
EventCategory["SystemBoot"] = "system.boot";
|
|
37
37
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -592,7 +592,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
592
592
|
* a package zone — a newly-appeared stationary object of a package class
|
|
593
593
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
594
594
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
595
|
-
* entryId, className, zoneIds,
|
|
595
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
596
596
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
597
597
|
* this bus topic drives notifier rules + live UI. See
|
|
598
598
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5378,7 +5378,7 @@ var ZodIssueCode = {
|
|
|
5378
5378
|
var ZodFirstPartyTypeKind;
|
|
5379
5379
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5380
5380
|
//#endregion
|
|
5381
|
-
//#region ../types/dist/sleep-
|
|
5381
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5382
5382
|
/**
|
|
5383
5383
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5384
5384
|
* window to float samples (D455).
|
|
@@ -7404,13 +7404,30 @@ new Set([
|
|
|
7404
7404
|
"scene",
|
|
7405
7405
|
"motion",
|
|
7406
7406
|
"object",
|
|
7407
|
-
"audio"
|
|
7407
|
+
"audio",
|
|
7408
|
+
"mosaic"
|
|
7408
7409
|
]);
|
|
7409
|
-
|
|
7410
|
+
/**
|
|
7411
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7412
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7413
|
+
* does not re-spell the list and drift from it.
|
|
7414
|
+
*/
|
|
7415
|
+
var EVENT_OWNER_TYPES = [
|
|
7410
7416
|
"motion",
|
|
7411
7417
|
"object",
|
|
7412
7418
|
"audio"
|
|
7413
|
-
]
|
|
7419
|
+
];
|
|
7420
|
+
/**
|
|
7421
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7422
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7423
|
+
* `(table, id)`).
|
|
7424
|
+
*
|
|
7425
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7426
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7427
|
+
* nothing failing until a caller asked.
|
|
7428
|
+
*/
|
|
7429
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7430
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7414
7431
|
var EncodeProfileSchema = object({
|
|
7415
7432
|
video: object({
|
|
7416
7433
|
codec: _enum([
|
|
@@ -12617,6 +12634,16 @@ method(object({
|
|
|
12617
12634
|
filter: QueryFilterSchema.optional(),
|
|
12618
12635
|
columns: array(string()).readonly().optional()
|
|
12619
12636
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12637
|
+
namespace: string().optional(),
|
|
12638
|
+
collection: string(),
|
|
12639
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12640
|
+
* index on the collection. Never empty. */
|
|
12641
|
+
conflict: array(string()).readonly(),
|
|
12642
|
+
record: BulkRecordSchema
|
|
12643
|
+
}), object({
|
|
12644
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12645
|
+
* row's own id on an update. */
|
|
12646
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12620
12647
|
namespace: string().optional(),
|
|
12621
12648
|
collection: string(),
|
|
12622
12649
|
record: object({
|
|
@@ -12751,6 +12778,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12751
12778
|
id: union([string(), number()]) }), {
|
|
12752
12779
|
kind: "mutation",
|
|
12753
12780
|
auth: "admin"
|
|
12781
|
+
}), method(object({
|
|
12782
|
+
namespace: string().optional(),
|
|
12783
|
+
collection: string(),
|
|
12784
|
+
conflict: array(string()).readonly(),
|
|
12785
|
+
record: BulkRecordSchema
|
|
12786
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12787
|
+
kind: "mutation",
|
|
12788
|
+
auth: "admin"
|
|
12754
12789
|
}), method(object({
|
|
12755
12790
|
namespace: string().optional(),
|
|
12756
12791
|
collection: string(),
|
|
@@ -19152,8 +19187,8 @@ var TrackPositionSchema = object({
|
|
|
19152
19187
|
var TrackSnapshotSchema = object({
|
|
19153
19188
|
timestamp: number(),
|
|
19154
19189
|
position: TrackPositionSchema,
|
|
19155
|
-
/**
|
|
19156
|
-
|
|
19190
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19191
|
+
mediaId: number().int()
|
|
19157
19192
|
});
|
|
19158
19193
|
/**
|
|
19159
19194
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19757,14 +19792,14 @@ var ObjectEventSchema = object({
|
|
|
19757
19792
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19758
19793
|
frameWidth: number().optional(),
|
|
19759
19794
|
frameHeight: number().optional(),
|
|
19760
|
-
/**
|
|
19761
|
-
|
|
19762
|
-
/** Design B:
|
|
19795
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19796
|
+
mediaId: number().int().optional(),
|
|
19797
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19763
19798
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19764
|
-
* (`/addon/<addonId>/event-media/<
|
|
19799
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19765
19800
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19766
|
-
* sources — consumers fall back to `
|
|
19767
|
-
|
|
19801
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19802
|
+
keyFrameMediaId: number().int().optional(),
|
|
19768
19803
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19769
19804
|
mediaUrl: string().optional(),
|
|
19770
19805
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19814,7 +19849,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19814
19849
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19815
19850
|
*
|
|
19816
19851
|
* `url` points at the `event-media` data plane
|
|
19817
|
-
* (`/addon/<addonId>/event-media/<
|
|
19852
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19818
19853
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19819
19854
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19820
19855
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19822,10 +19857,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19822
19857
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19823
19858
|
* (per-device scoping).
|
|
19824
19859
|
*
|
|
19825
|
-
* The URL is built from the row's
|
|
19826
|
-
*
|
|
19860
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19861
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19862
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19827
19863
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19828
|
-
* `faceCrop`/`plateCrop
|
|
19864
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19865
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19866
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19829
19867
|
*
|
|
19830
19868
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19831
19869
|
*
|
|
@@ -19838,7 +19876,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19838
19876
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19839
19877
|
*/
|
|
19840
19878
|
var MediaFileSchema = object({
|
|
19841
|
-
|
|
19879
|
+
/**
|
|
19880
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19881
|
+
*
|
|
19882
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19883
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19884
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19885
|
+
* different rows that spell the same number, and a track whose
|
|
19886
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19887
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19888
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19889
|
+
* at all.
|
|
19890
|
+
*/
|
|
19891
|
+
mediaId: number().int(),
|
|
19842
19892
|
kind: MediaFileKindEnum,
|
|
19843
19893
|
sizeBytes: number(),
|
|
19844
19894
|
timestamp: number()
|
|
@@ -19946,7 +19996,7 @@ var RetrainTrackSchema = object({
|
|
|
19946
19996
|
});
|
|
19947
19997
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19948
19998
|
var RetrainFrameCandidateSchema = object({
|
|
19949
|
-
|
|
19999
|
+
mediaId: number().int(),
|
|
19950
20000
|
kind: MediaFileKindEnum,
|
|
19951
20001
|
timestamp: number(),
|
|
19952
20002
|
sizeBytes: number().int(),
|
|
@@ -19960,7 +20010,7 @@ var RetrainFrameSchema = object({
|
|
|
19960
20010
|
deviceId: number(),
|
|
19961
20011
|
trackId: string(),
|
|
19962
20012
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19963
|
-
|
|
20013
|
+
sourceMediaId: number().int(),
|
|
19964
20014
|
sourceKind: MediaFileKindEnum,
|
|
19965
20015
|
sizeBytes: number().int(),
|
|
19966
20016
|
width: number().int(),
|
|
@@ -19976,7 +20026,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19976
20026
|
var RetrainFrameSelectionSchema = object({
|
|
19977
20027
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19978
20028
|
refused: array(object({
|
|
19979
|
-
|
|
20029
|
+
sourceMediaId: number().int(),
|
|
19980
20030
|
reason: RetrainCopyRefusalSchema
|
|
19981
20031
|
})).readonly()
|
|
19982
20032
|
});
|
|
@@ -19984,7 +20034,7 @@ var RetrainFrameListSchema = object({
|
|
|
19984
20034
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19985
20035
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19986
20036
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19987
|
-
|
|
20037
|
+
autoPickMediaId: number().int().optional()
|
|
19988
20038
|
});
|
|
19989
20039
|
/** What the operator asked the assist to look for. */
|
|
19990
20040
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20079,9 +20129,11 @@ var RecentTracksQueryInput = object({
|
|
|
20079
20129
|
});
|
|
20080
20130
|
/**
|
|
20081
20131
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20082
|
-
* `
|
|
20083
|
-
* served by the event-media plane
|
|
20084
|
-
* member visible has been materialised
|
|
20132
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20133
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20134
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20135
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20136
|
+
* row once event ids became per-table rowids).
|
|
20085
20137
|
*/
|
|
20086
20138
|
var SummarySchema = object({
|
|
20087
20139
|
id: string(),
|
|
@@ -20090,7 +20142,7 @@ var SummarySchema = object({
|
|
|
20090
20142
|
lastActiveAt: number(),
|
|
20091
20143
|
sealedAt: number().nullable(),
|
|
20092
20144
|
memberCount: number().int().nonnegative(),
|
|
20093
|
-
|
|
20145
|
+
groupShotMediaId: number().int().nullable()
|
|
20094
20146
|
});
|
|
20095
20147
|
var SummariesQueryInput = object({
|
|
20096
20148
|
deviceIds: array(number()).min(1),
|
|
@@ -20644,7 +20696,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20644
20696
|
}), method(object({
|
|
20645
20697
|
deviceId: number(),
|
|
20646
20698
|
trackId: string(),
|
|
20647
|
-
|
|
20699
|
+
mediaIds: array(number().int()).min(1)
|
|
20648
20700
|
}), RetrainFrameSelectionSchema, {
|
|
20649
20701
|
kind: "mutation",
|
|
20650
20702
|
auth: "admin"
|
|
@@ -20712,7 +20764,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20712
20764
|
kind: "query",
|
|
20713
20765
|
auth: "admin"
|
|
20714
20766
|
}), method(object({
|
|
20715
|
-
|
|
20767
|
+
/** Which of the three event tables owns the row. */
|
|
20768
|
+
ownerType: EventOwnerTypeSchema,
|
|
20769
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20770
|
+
eventId: number().int(),
|
|
20716
20771
|
kind: MediaFileKindEnum.optional(),
|
|
20717
20772
|
deviceId: number()
|
|
20718
20773
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20723,7 +20778,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20723
20778
|
trackId: string(),
|
|
20724
20779
|
deviceId: number()
|
|
20725
20780
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20726
|
-
|
|
20781
|
+
ownerType: EventOwnerTypeSchema,
|
|
20782
|
+
eventId: number().int(),
|
|
20727
20783
|
deviceId: number()
|
|
20728
20784
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20729
20785
|
kind: "mutation",
|
|
@@ -26064,8 +26120,8 @@ var IdentitySchema = object({
|
|
|
26064
26120
|
id: string(),
|
|
26065
26121
|
name: string(),
|
|
26066
26122
|
sampleCount: number().int().nonnegative(),
|
|
26067
|
-
|
|
26068
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26123
|
+
coverMediaId: number().int().optional(),
|
|
26124
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26069
26125
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26070
26126
|
coverBase64: string().optional()
|
|
26071
26127
|
});
|
|
@@ -26091,8 +26147,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26091
26147
|
enrolledAt: number().int(),
|
|
26092
26148
|
deviceId: number().int().optional(),
|
|
26093
26149
|
source: _enum(["detected", "photo"]),
|
|
26094
|
-
/** The enrolled crop's media
|
|
26095
|
-
|
|
26150
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26151
|
+
mediaId: number().int().optional(),
|
|
26096
26152
|
/**
|
|
26097
26153
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26098
26154
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26161,15 +26217,15 @@ var FaceInfoSchema = object({
|
|
|
26161
26217
|
*/
|
|
26162
26218
|
cropUrl: string().optional(),
|
|
26163
26219
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26164
|
-
* view draw the box over the native `
|
|
26220
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26165
26221
|
* legacy rows written before design B. */
|
|
26166
26222
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26167
26223
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26168
26224
|
* Fetch the native JPEG via the event-media data-plane
|
|
26169
|
-
* (`/addon/<addonId>/event-media/<
|
|
26225
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26170
26226
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26171
26227
|
* back to the inline `base64` face crop. */
|
|
26172
|
-
|
|
26228
|
+
keyFrameMediaId: number().int().optional(),
|
|
26173
26229
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26174
26230
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26175
26231
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26238,11 +26294,14 @@ var FaceClusterSchema = object({
|
|
|
26238
26294
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26239
26295
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26240
26296
|
*
|
|
26241
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26242
|
-
* media
|
|
26297
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26298
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26299
|
+
* access decision.
|
|
26243
26300
|
*/
|
|
26244
26301
|
var MediaFileLiteSchema$1 = object({
|
|
26245
|
-
|
|
26302
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26303
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26304
|
+
mediaId: number().int(),
|
|
26246
26305
|
kind: string(),
|
|
26247
26306
|
url: string(),
|
|
26248
26307
|
sizeBytes: number(),
|
|
@@ -26259,7 +26318,7 @@ method(object({
|
|
|
26259
26318
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26260
26319
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26261
26320
|
*
|
|
26262
|
-
* Nothing loses its avatar: `
|
|
26321
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26263
26322
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26264
26323
|
*
|
|
26265
26324
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29622,8 +29681,8 @@ var VehicleSchema = object({
|
|
|
29622
29681
|
id: string(),
|
|
29623
29682
|
name: string(),
|
|
29624
29683
|
sampleCount: number().int().nonnegative(),
|
|
29625
|
-
|
|
29626
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29684
|
+
coverMediaId: number().int().optional(),
|
|
29685
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29627
29686
|
coverBase64: string().optional()
|
|
29628
29687
|
});
|
|
29629
29688
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29656,7 +29715,7 @@ var PlateInfoSchema = object({
|
|
|
29656
29715
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29657
29716
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29658
29717
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29659
|
-
|
|
29718
|
+
keyFrameMediaId: number().int().optional(),
|
|
29660
29719
|
base64: string().optional(),
|
|
29661
29720
|
/**
|
|
29662
29721
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29677,11 +29736,14 @@ var PlateInfoSchema = object({
|
|
|
29677
29736
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29678
29737
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29679
29738
|
*
|
|
29680
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29681
|
-
* media
|
|
29739
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29740
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29741
|
+
* access decision.
|
|
29682
29742
|
*/
|
|
29683
29743
|
var MediaFileLiteSchema = object({
|
|
29684
|
-
|
|
29744
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29745
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29746
|
+
mediaId: number().int(),
|
|
29685
29747
|
kind: string(),
|
|
29686
29748
|
url: string(),
|
|
29687
29749
|
sizeBytes: number(),
|
|
@@ -29740,7 +29802,7 @@ method(object({
|
|
|
29740
29802
|
}), method(object({
|
|
29741
29803
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29742
29804
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29743
|
-
* option; `
|
|
29805
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29744
29806
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29745
29807
|
* resolves to `false` and is exactly the intended default. */
|
|
29746
29808
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31309,7 +31371,14 @@ var SceneReferenceSchema = object({
|
|
|
31309
31371
|
modelId: string(),
|
|
31310
31372
|
condition: SceneConditionSchema,
|
|
31311
31373
|
capturedAt: number(),
|
|
31312
|
-
|
|
31374
|
+
/**
|
|
31375
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31376
|
+
*
|
|
31377
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31378
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31379
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31380
|
+
*/
|
|
31381
|
+
thumbnailMediaId: number().int().optional(),
|
|
31313
31382
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31314
31383
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31315
31384
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33293,7 +33362,7 @@ var StationaryObjectSchema = object({
|
|
|
33293
33362
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33294
33363
|
label: string().optional(),
|
|
33295
33364
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33296
|
-
|
|
33365
|
+
keyFrameMediaId: number().int().optional()
|
|
33297
33366
|
});
|
|
33298
33367
|
var CameraOccupancySnapshotSchema = object({
|
|
33299
33368
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -35613,6 +35682,12 @@ Object.freeze({
|
|
|
35613
35682
|
addonId: null,
|
|
35614
35683
|
access: "create"
|
|
35615
35684
|
},
|
|
35685
|
+
"dataStoreProvider.upsert": {
|
|
35686
|
+
capName: "data-store-provider",
|
|
35687
|
+
capScope: "system",
|
|
35688
|
+
addonId: null,
|
|
35689
|
+
access: "create"
|
|
35690
|
+
},
|
|
35616
35691
|
"dayNight.getOptions": {
|
|
35617
35692
|
capName: "day-night",
|
|
35618
35693
|
capScope: "device",
|
|
@@ -39477,6 +39552,12 @@ Object.freeze({
|
|
|
39477
39552
|
addonId: null,
|
|
39478
39553
|
access: "create"
|
|
39479
39554
|
},
|
|
39555
|
+
"settingsStore.upsert": {
|
|
39556
|
+
capName: "settings-store",
|
|
39557
|
+
capScope: "system",
|
|
39558
|
+
addonId: null,
|
|
39559
|
+
access: "create"
|
|
39560
|
+
},
|
|
39480
39561
|
"smtpProvider.getStatus": {
|
|
39481
39562
|
capName: "smtp-provider",
|
|
39482
39563
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -8,7 +8,7 @@ import { createServer } from "node:http";
|
|
|
8
8
|
//#region \0rolldown/runtime.js
|
|
9
9
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
10
10
|
//#endregion
|
|
11
|
-
//#region ../types/dist/event-category-
|
|
11
|
+
//#region ../types/dist/event-category-ZyX6jcse.mjs
|
|
12
12
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
13
13
|
EventCategory["SystemBoot"] = "system.boot";
|
|
14
14
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -569,7 +569,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
569
569
|
* a package zone — a newly-appeared stationary object of a package class
|
|
570
570
|
* that cleared the class / zone / dwell / size gates. Payload:
|
|
571
571
|
* `PipelineAnalyticsPackageDeliveredPayload` carrying `{ deviceId,
|
|
572
|
-
* entryId, className, zoneIds,
|
|
572
|
+
* entryId, className, zoneIds, keyFrameMediaId?, bbox, timestamp }`.
|
|
573
573
|
* Telemetry (D8): the durable record is the `package-events` store row;
|
|
574
574
|
* this bus topic drives notifier rules + live UI. See
|
|
575
575
|
* docs/superpowers/specs/2026-07-17-package-zones-design.md §5.1.
|
|
@@ -5355,7 +5355,7 @@ var ZodIssueCode = {
|
|
|
5355
5355
|
var ZodFirstPartyTypeKind;
|
|
5356
5356
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5357
5357
|
//#endregion
|
|
5358
|
-
//#region ../types/dist/sleep-
|
|
5358
|
+
//#region ../types/dist/sleep-CnLyvg3w.mjs
|
|
5359
5359
|
/**
|
|
5360
5360
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5361
5361
|
* window to float samples (D455).
|
|
@@ -7381,13 +7381,30 @@ new Set([
|
|
|
7381
7381
|
"scene",
|
|
7382
7382
|
"motion",
|
|
7383
7383
|
"object",
|
|
7384
|
-
"audio"
|
|
7384
|
+
"audio",
|
|
7385
|
+
"mosaic"
|
|
7385
7386
|
]);
|
|
7386
|
-
|
|
7387
|
+
/**
|
|
7388
|
+
* The owner types that are event tables, in the order the event-media resolver
|
|
7389
|
+
* should consider them. Exported so a consumer asking "is this key an event?"
|
|
7390
|
+
* does not re-spell the list and drift from it.
|
|
7391
|
+
*/
|
|
7392
|
+
var EVENT_OWNER_TYPES = [
|
|
7387
7393
|
"motion",
|
|
7388
7394
|
"object",
|
|
7389
7395
|
"audio"
|
|
7390
|
-
]
|
|
7396
|
+
];
|
|
7397
|
+
/**
|
|
7398
|
+
* The same list as a Zod enum, for the cap inputs that must NAME the table
|
|
7399
|
+
* (D482: `getEventMedia` / `listEventMedia` take an owner, and an owner is
|
|
7400
|
+
* `(table, id)`).
|
|
7401
|
+
*
|
|
7402
|
+
* Built FROM {@link EVENT_OWNER_TYPES} rather than re-spelled: a fourth event
|
|
7403
|
+
* table would otherwise be accepted by the codec and refused at the door, with
|
|
7404
|
+
* nothing failing until a caller asked.
|
|
7405
|
+
*/
|
|
7406
|
+
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7407
|
+
new Set(EVENT_OWNER_TYPES);
|
|
7391
7408
|
var EncodeProfileSchema = object({
|
|
7392
7409
|
video: object({
|
|
7393
7410
|
codec: _enum([
|
|
@@ -12594,6 +12611,16 @@ method(object({
|
|
|
12594
12611
|
filter: QueryFilterSchema.optional(),
|
|
12595
12612
|
columns: array(string()).readonly().optional()
|
|
12596
12613
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
12614
|
+
namespace: string().optional(),
|
|
12615
|
+
collection: string(),
|
|
12616
|
+
/** Declared columns identifying the slot; must be covered by a UNIQUE
|
|
12617
|
+
* index on the collection. Never empty. */
|
|
12618
|
+
conflict: array(string()).readonly(),
|
|
12619
|
+
record: BulkRecordSchema
|
|
12620
|
+
}), object({
|
|
12621
|
+
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
12622
|
+
* row's own id on an update. */
|
|
12623
|
+
id: union([string(), number()]) }), { kind: "mutation" }), method(object({
|
|
12597
12624
|
namespace: string().optional(),
|
|
12598
12625
|
collection: string(),
|
|
12599
12626
|
record: object({
|
|
@@ -12728,6 +12755,14 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
12728
12755
|
id: union([string(), number()]) }), {
|
|
12729
12756
|
kind: "mutation",
|
|
12730
12757
|
auth: "admin"
|
|
12758
|
+
}), method(object({
|
|
12759
|
+
namespace: string().optional(),
|
|
12760
|
+
collection: string(),
|
|
12761
|
+
conflict: array(string()).readonly(),
|
|
12762
|
+
record: BulkRecordSchema
|
|
12763
|
+
}), object({ id: union([string(), number()]) }), {
|
|
12764
|
+
kind: "mutation",
|
|
12765
|
+
auth: "admin"
|
|
12731
12766
|
}), method(object({
|
|
12732
12767
|
namespace: string().optional(),
|
|
12733
12768
|
collection: string(),
|
|
@@ -19129,8 +19164,8 @@ var TrackPositionSchema = object({
|
|
|
19129
19164
|
var TrackSnapshotSchema = object({
|
|
19130
19165
|
timestamp: number(),
|
|
19131
19166
|
position: TrackPositionSchema,
|
|
19132
|
-
/**
|
|
19133
|
-
|
|
19167
|
+
/** The snapshot's media row id (D482); resolve via `listTrackMedia({ trackId })`. */
|
|
19168
|
+
mediaId: number().int()
|
|
19134
19169
|
});
|
|
19135
19170
|
/**
|
|
19136
19171
|
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
@@ -19734,14 +19769,14 @@ var ObjectEventSchema = object({
|
|
|
19734
19769
|
* pixel-space `bbox` onto a displayed image. Omitted in slim projection. */
|
|
19735
19770
|
frameWidth: number().optional(),
|
|
19736
19771
|
frameHeight: number().optional(),
|
|
19737
|
-
/**
|
|
19738
|
-
|
|
19739
|
-
/** Design B:
|
|
19772
|
+
/** Media row id of the crop attached to this event (if any) — D482. */
|
|
19773
|
+
mediaId: number().int().optional(),
|
|
19774
|
+
/** Design B: media row id of the track's native-resolution key frame (the
|
|
19740
19775
|
* best-detection full frame). Resolve via the event-media data-plane
|
|
19741
|
-
* (`/addon/<addonId>/event-media/<
|
|
19776
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`) for a detail view that
|
|
19742
19777
|
* draws `bbox` over the native frame. Absent on legacy rows / non-decoded
|
|
19743
|
-
* sources — consumers fall back to `
|
|
19744
|
-
|
|
19778
|
+
* sources — consumers fall back to `mediaId` (the tight crop). */
|
|
19779
|
+
keyFrameMediaId: number().int().optional(),
|
|
19745
19780
|
/** Populated by B5 (recording playback URL for this event). */
|
|
19746
19781
|
mediaUrl: string().optional(),
|
|
19747
19782
|
/** The parent track's key-event importance [0,1], propagated to every object
|
|
@@ -19791,7 +19826,7 @@ var MediaFileKindEnum = _enum([
|
|
|
19791
19826
|
* hub-main's heap on the way past — for an `<img>` that would have cached it.
|
|
19792
19827
|
*
|
|
19793
19828
|
* `url` points at the `event-media` data plane
|
|
19794
|
-
* (`/addon/<addonId>/event-media/<
|
|
19829
|
+
* (`/addon/<addonId>/event-media/m/<mediaId>` — D482), which serves the same blob
|
|
19795
19830
|
* with an ETag and `Cache-Control: immutable`, honours conditional GETs, can
|
|
19796
19831
|
* render a `?variant=thumb`, and streams. The hub gate in front of it requires
|
|
19797
19832
|
* a bearer or the session cookie (`access: 'authenticated'`), so the bytes are
|
|
@@ -19799,10 +19834,13 @@ var MediaFileKindEnum = _enum([
|
|
|
19799
19834
|
* `data-plane-access.ts` for the rule and the one gap it does not close
|
|
19800
19835
|
* (per-device scoping).
|
|
19801
19836
|
*
|
|
19802
|
-
* The URL is built from the row's
|
|
19803
|
-
*
|
|
19837
|
+
* The URL is built from the row's own id, which since D482 says nothing about
|
|
19838
|
+
* the row's owner or kind — and that is the point. The published `kind` is not
|
|
19839
|
+
* the stored one (a track's face/plate crop is stored as `crop` under
|
|
19804
19840
|
* `('face'|'plate', '<prefix>-<trackId>')` and published as
|
|
19805
|
-
* `faceCrop`/`plateCrop
|
|
19841
|
+
* `faceCrop`/`plateCrop`), and under the old composite key the URL had to be
|
|
19842
|
+
* taken from `row.key` verbatim or it 404'd exactly those two rows. An id
|
|
19843
|
+
* cannot be mis-reconstructed, because there is nothing in it to reconstruct.
|
|
19806
19844
|
*
|
|
19807
19845
|
* ## `base64` is TRANSITIONAL and is going away
|
|
19808
19846
|
*
|
|
@@ -19815,7 +19853,19 @@ var MediaFileKindEnum = _enum([
|
|
|
19815
19853
|
* `analytics-query-facade.ts`; nothing else reads it.
|
|
19816
19854
|
*/
|
|
19817
19855
|
var MediaFileSchema = object({
|
|
19818
|
-
|
|
19856
|
+
/**
|
|
19857
|
+
* The media row's OWN id — the rowid SQLite assigned it (D482).
|
|
19858
|
+
*
|
|
19859
|
+
* It used to be the row's composite key, `<ownerType>:<ownerId>:<fileKind>
|
|
19860
|
+
* [:<timestampMs>]`, which embedded a FOREIGN id. D474 made event ids
|
|
19861
|
+
* per-table rowid aliases, so `object:101314` and `motion:101314` are two
|
|
19862
|
+
* different rows that spell the same number, and a track whose
|
|
19863
|
+
* `bestEventId` was an object event was served a motion event's snapshot —
|
|
19864
|
+
* a night-time thumbnail on an afternoon track, with no error anywhere. A
|
|
19865
|
+
* surrogate id cannot name the wrong row's owner, because it names no owner
|
|
19866
|
+
* at all.
|
|
19867
|
+
*/
|
|
19868
|
+
mediaId: number().int(),
|
|
19819
19869
|
kind: MediaFileKindEnum,
|
|
19820
19870
|
sizeBytes: number(),
|
|
19821
19871
|
timestamp: number()
|
|
@@ -19923,7 +19973,7 @@ var RetrainTrackSchema = object({
|
|
|
19923
19973
|
});
|
|
19924
19974
|
/** A frame the picker may offer — an index row, no blob was read to produce it. */
|
|
19925
19975
|
var RetrainFrameCandidateSchema = object({
|
|
19926
|
-
|
|
19976
|
+
mediaId: number().int(),
|
|
19927
19977
|
kind: MediaFileKindEnum,
|
|
19928
19978
|
timestamp: number(),
|
|
19929
19979
|
sizeBytes: number().int(),
|
|
@@ -19937,7 +19987,7 @@ var RetrainFrameSchema = object({
|
|
|
19937
19987
|
deviceId: number(),
|
|
19938
19988
|
trackId: string(),
|
|
19939
19989
|
/** Provenance only. It may already point at nothing — that is expected. */
|
|
19940
|
-
|
|
19990
|
+
sourceMediaId: number().int(),
|
|
19941
19991
|
sourceKind: MediaFileKindEnum,
|
|
19942
19992
|
sizeBytes: number().int(),
|
|
19943
19993
|
width: number().int(),
|
|
@@ -19953,7 +20003,7 @@ var RetrainCopyRefusalSchema = _enum([
|
|
|
19953
20003
|
var RetrainFrameSelectionSchema = object({
|
|
19954
20004
|
copied: array(RetrainFrameSchema).readonly(),
|
|
19955
20005
|
refused: array(object({
|
|
19956
|
-
|
|
20006
|
+
sourceMediaId: number().int(),
|
|
19957
20007
|
reason: RetrainCopyRefusalSchema
|
|
19958
20008
|
})).readonly()
|
|
19959
20009
|
});
|
|
@@ -19961,7 +20011,7 @@ var RetrainFrameListSchema = object({
|
|
|
19961
20011
|
candidates: array(RetrainFrameCandidateSchema).readonly(),
|
|
19962
20012
|
copies: array(RetrainFrameSchema).readonly(),
|
|
19963
20013
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
19964
|
-
|
|
20014
|
+
autoPickMediaId: number().int().optional()
|
|
19965
20015
|
});
|
|
19966
20016
|
/** What the operator asked the assist to look for. */
|
|
19967
20017
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
@@ -20056,9 +20106,11 @@ var RecentTracksQueryInput = object({
|
|
|
20056
20106
|
});
|
|
20057
20107
|
/**
|
|
20058
20108
|
* A Summary (D359): the per-camera session envelope that references tracks.
|
|
20059
|
-
* `
|
|
20060
|
-
* served by the event-media plane
|
|
20061
|
-
* member visible has been materialised
|
|
20109
|
+
* `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
|
|
20110
|
+
* 'summary'`, served by the event-media plane at `/m/<id>`), null until the
|
|
20111
|
+
* first frame with a member visible has been materialised (D482 — it was the
|
|
20112
|
+
* row's composite key, which embedded the owner and could name another table's
|
|
20113
|
+
* row once event ids became per-table rowids).
|
|
20062
20114
|
*/
|
|
20063
20115
|
var SummarySchema = object({
|
|
20064
20116
|
id: string(),
|
|
@@ -20067,7 +20119,7 @@ var SummarySchema = object({
|
|
|
20067
20119
|
lastActiveAt: number(),
|
|
20068
20120
|
sealedAt: number().nullable(),
|
|
20069
20121
|
memberCount: number().int().nonnegative(),
|
|
20070
|
-
|
|
20122
|
+
groupShotMediaId: number().int().nullable()
|
|
20071
20123
|
});
|
|
20072
20124
|
var SummariesQueryInput = object({
|
|
20073
20125
|
deviceIds: array(number()).min(1),
|
|
@@ -20621,7 +20673,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20621
20673
|
}), method(object({
|
|
20622
20674
|
deviceId: number(),
|
|
20623
20675
|
trackId: string(),
|
|
20624
|
-
|
|
20676
|
+
mediaIds: array(number().int()).min(1)
|
|
20625
20677
|
}), RetrainFrameSelectionSchema, {
|
|
20626
20678
|
kind: "mutation",
|
|
20627
20679
|
auth: "admin"
|
|
@@ -20689,7 +20741,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20689
20741
|
kind: "query",
|
|
20690
20742
|
auth: "admin"
|
|
20691
20743
|
}), method(object({
|
|
20692
|
-
|
|
20744
|
+
/** Which of the three event tables owns the row. */
|
|
20745
|
+
ownerType: EventOwnerTypeSchema,
|
|
20746
|
+
/** The event's rowid in that table (D474: an event id is a number). */
|
|
20747
|
+
eventId: number().int(),
|
|
20693
20748
|
kind: MediaFileKindEnum.optional(),
|
|
20694
20749
|
deviceId: number()
|
|
20695
20750
|
}), array(MediaFileSchema).readonly()), method(object({
|
|
@@ -20700,7 +20755,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20700
20755
|
trackId: string(),
|
|
20701
20756
|
deviceId: number()
|
|
20702
20757
|
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20703
|
-
|
|
20758
|
+
ownerType: EventOwnerTypeSchema,
|
|
20759
|
+
eventId: number().int(),
|
|
20704
20760
|
deviceId: number()
|
|
20705
20761
|
}), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20706
20762
|
kind: "mutation",
|
|
@@ -26041,8 +26097,8 @@ var IdentitySchema = object({
|
|
|
26041
26097
|
id: string(),
|
|
26042
26098
|
name: string(),
|
|
26043
26099
|
sampleCount: number().int().nonnegative(),
|
|
26044
|
-
|
|
26045
|
-
/** Inline base64 of the cover sample's crop, resolved from `
|
|
26100
|
+
coverMediaId: number().int().optional(),
|
|
26101
|
+
/** Inline base64 of the cover sample's crop, resolved from `coverMediaId`.
|
|
26046
26102
|
* Lets the UI render the person's face avatar instead of a placeholder icon. */
|
|
26047
26103
|
coverBase64: string().optional()
|
|
26048
26104
|
});
|
|
@@ -26068,8 +26124,8 @@ var IdentitySampleAuditRowSchema = object({
|
|
|
26068
26124
|
enrolledAt: number().int(),
|
|
26069
26125
|
deviceId: number().int().optional(),
|
|
26070
26126
|
source: _enum(["detected", "photo"]),
|
|
26071
|
-
/** The enrolled crop's media
|
|
26072
|
-
|
|
26127
|
+
/** The enrolled crop's media row id, so the panel can show the evidence. */
|
|
26128
|
+
mediaId: number().int().optional(),
|
|
26073
26129
|
/**
|
|
26074
26130
|
* False = the sample is stamped with a DIFFERENT face model, and a cosine
|
|
26075
26131
|
* across feature spaces is a well-formed float with no meaning. Every number
|
|
@@ -26138,15 +26194,15 @@ var FaceInfoSchema = object({
|
|
|
26138
26194
|
*/
|
|
26139
26195
|
cropUrl: string().optional(),
|
|
26140
26196
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
26141
|
-
* view draw the box over the native `
|
|
26197
|
+
* view draw the box over the native `keyFrameMediaId` frame. Absent on
|
|
26142
26198
|
* legacy rows written before design B. */
|
|
26143
26199
|
faceBbox: BoundingBoxSchema.optional(),
|
|
26144
26200
|
/** Design B: MediaStore key of the track's native-resolution key frame.
|
|
26145
26201
|
* Fetch the native JPEG via the event-media data-plane
|
|
26146
|
-
* (`/addon/<addonId>/event-media/<
|
|
26202
|
+
* (`/addon/<addonId>/event-media/m/<keyFrameMediaId>`). Absent when the
|
|
26147
26203
|
* track produced no key frame (e.g. native/onboard source) — the UI falls
|
|
26148
26204
|
* back to the inline `base64` face crop. */
|
|
26149
|
-
|
|
26205
|
+
keyFrameMediaId: number().int().optional(),
|
|
26150
26206
|
/** Winning identity-match cosine (0..1) for this face's track, when an
|
|
26151
26207
|
* identity was auto-confirmed. Lets the UI surface WHY a face was assigned
|
|
26152
26208
|
* (confidence badge / low-confidence audit). Absent on legacy rows and on
|
|
@@ -26215,11 +26271,14 @@ var FaceClusterSchema = object({
|
|
|
26215
26271
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
26216
26272
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
26217
26273
|
*
|
|
26218
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
26219
|
-
* media
|
|
26274
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
26275
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
26276
|
+
* access decision.
|
|
26220
26277
|
*/
|
|
26221
26278
|
var MediaFileLiteSchema$1 = object({
|
|
26222
|
-
|
|
26279
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
26280
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
26281
|
+
mediaId: number().int(),
|
|
26223
26282
|
kind: string(),
|
|
26224
26283
|
url: string(),
|
|
26225
26284
|
sizeBytes: number(),
|
|
@@ -26236,7 +26295,7 @@ method(object({
|
|
|
26236
26295
|
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
26237
26296
|
* four times and the viewer holds at `staleTime: 30_000`.
|
|
26238
26297
|
*
|
|
26239
|
-
* Nothing loses its avatar: `
|
|
26298
|
+
* Nothing loses its avatar: `coverMediaId` is already on every row and
|
|
26240
26299
|
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
26241
26300
|
*
|
|
26242
26301
|
* **This is an INPUT field, so it does not reach the addon until the
|
|
@@ -29599,8 +29658,8 @@ var VehicleSchema = object({
|
|
|
29599
29658
|
id: string(),
|
|
29600
29659
|
name: string(),
|
|
29601
29660
|
sampleCount: number().int().nonnegative(),
|
|
29602
|
-
|
|
29603
|
-
/** Inline base64 of the cover sample's plate crop, resolved from `
|
|
29661
|
+
coverMediaId: number().int().optional(),
|
|
29662
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaId`. */
|
|
29604
29663
|
coverBase64: string().optional()
|
|
29605
29664
|
});
|
|
29606
29665
|
var VehicleSampleInfoSchema = object({
|
|
@@ -29633,7 +29692,7 @@ var PlateInfoSchema = object({
|
|
|
29633
29692
|
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
29634
29693
|
plateBbox: BoundingBoxSchema.optional(),
|
|
29635
29694
|
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
29636
|
-
|
|
29695
|
+
keyFrameMediaId: number().int().optional(),
|
|
29637
29696
|
base64: string().optional(),
|
|
29638
29697
|
/**
|
|
29639
29698
|
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
@@ -29654,11 +29713,14 @@ var PlateInfoSchema = object({
|
|
|
29654
29713
|
* `data:image/jpeg;base64,…` from a row whose `key` sat right beside it, in a
|
|
29655
29714
|
* dialog already rendering its key FRAME from the `event-media` plane.
|
|
29656
29715
|
*
|
|
29657
|
-
* `url` is `/addon/<addonId>/event-media/<
|
|
29658
|
-
* media
|
|
29716
|
+
* `url` is `/addon/<addonId>/event-media/m/<mediaId>` (D482). The plane
|
|
29717
|
+
* resolves a media row by its own id, so this needed no new plane and no new
|
|
29718
|
+
* access decision.
|
|
29659
29719
|
*/
|
|
29660
29720
|
var MediaFileLiteSchema = object({
|
|
29661
|
-
|
|
29721
|
+
/** The media row's own id — the same address `MediaFileRef.mediaId` carries
|
|
29722
|
+
* (D482). It was the row's composite key, which embedded the owner. */
|
|
29723
|
+
mediaId: number().int(),
|
|
29662
29724
|
kind: string(),
|
|
29663
29725
|
url: string(),
|
|
29664
29726
|
sizeBytes: number(),
|
|
@@ -29717,7 +29779,7 @@ method(object({
|
|
|
29717
29779
|
}), method(object({
|
|
29718
29780
|
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
29719
29781
|
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
29720
|
-
* option; `
|
|
29782
|
+
* option; `coverMediaId` + the `event-media` plane carry the picture.
|
|
29721
29783
|
* INPUT field: stripped by the hub router until the train ships, which
|
|
29722
29784
|
* resolves to `false` and is exactly the intended default. */
|
|
29723
29785
|
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
@@ -31286,7 +31348,14 @@ var SceneReferenceSchema = object({
|
|
|
31286
31348
|
modelId: string(),
|
|
31287
31349
|
condition: SceneConditionSchema,
|
|
31288
31350
|
capturedAt: number(),
|
|
31289
|
-
|
|
31351
|
+
/**
|
|
31352
|
+
* The reference thumbnail's media ROW id (D482).
|
|
31353
|
+
*
|
|
31354
|
+
* The name already said `mediaId` while the value was the row's composite
|
|
31355
|
+
* key — a leftover that read as done and was not. It is the row's own id
|
|
31356
|
+
* now, addressed at `/addon/<addonId>/event-media/m/<id>`.
|
|
31357
|
+
*/
|
|
31358
|
+
thumbnailMediaId: number().int().optional(),
|
|
31290
31359
|
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
31291
31360
|
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
31292
31361
|
* normalized rect frame a different piece of world, and the scene would
|
|
@@ -33270,7 +33339,7 @@ var StationaryObjectSchema = object({
|
|
|
33270
33339
|
/** Enrichment label carried from the source track (identity / plate). */
|
|
33271
33340
|
label: string().optional(),
|
|
33272
33341
|
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
33273
|
-
|
|
33342
|
+
keyFrameMediaId: number().int().optional()
|
|
33274
33343
|
});
|
|
33275
33344
|
var CameraOccupancySnapshotSchema = object({
|
|
33276
33345
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
@@ -35590,6 +35659,12 @@ Object.freeze({
|
|
|
35590
35659
|
addonId: null,
|
|
35591
35660
|
access: "create"
|
|
35592
35661
|
},
|
|
35662
|
+
"dataStoreProvider.upsert": {
|
|
35663
|
+
capName: "data-store-provider",
|
|
35664
|
+
capScope: "system",
|
|
35665
|
+
addonId: null,
|
|
35666
|
+
access: "create"
|
|
35667
|
+
},
|
|
35593
35668
|
"dayNight.getOptions": {
|
|
35594
35669
|
capName: "day-night",
|
|
35595
35670
|
capScope: "device",
|
|
@@ -39454,6 +39529,12 @@ Object.freeze({
|
|
|
39454
39529
|
addonId: null,
|
|
39455
39530
|
access: "create"
|
|
39456
39531
|
},
|
|
39532
|
+
"settingsStore.upsert": {
|
|
39533
|
+
capName: "settings-store",
|
|
39534
|
+
capScope: "system",
|
|
39535
|
+
addonId: null,
|
|
39536
|
+
access: "create"
|
|
39537
|
+
},
|
|
39457
39538
|
"smtpProvider.getStatus": {
|
|
39458
39539
|
capName: "smtp-provider",
|
|
39459
39540
|
capScope: "system",
|