@camstack/addon-cloudflare 1.2.22 → 1.2.24
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/{dist-CMk_yoz7.mjs → dist-CCB3dnL3.mjs} +204 -61
- package/dist/{dist-BXYYqqcb.js → dist-j7oMFwvU.js} +204 -61
- package/dist/tunnel/cloudflare-tunnel.addon.js +1 -1
- package/dist/tunnel/cloudflare-tunnel.addon.mjs +1 -1
- package/dist/turn/cloudflare-turn.addon.js +1 -1
- package/dist/turn/cloudflare-turn.addon.mjs +1 -1
- package/package.json +1 -1
|
@@ -7549,7 +7549,7 @@ var RecordingBandSchema = object({
|
|
|
7549
7549
|
postBufferSec: number().min(0).optional()
|
|
7550
7550
|
});
|
|
7551
7551
|
({
|
|
7552
|
-
preBufferSec:
|
|
7552
|
+
preBufferSec: 15,
|
|
7553
7553
|
postBufferSec: 30
|
|
7554
7554
|
}).postBufferSec * 1e3;
|
|
7555
7555
|
/**
|
|
@@ -13527,128 +13527,103 @@ var COCO_TO_MACRO = {
|
|
|
13527
13527
|
var AUDIO_MACRO_LABELS = [
|
|
13528
13528
|
{
|
|
13529
13529
|
id: "speech",
|
|
13530
|
-
name: "Speech"
|
|
13531
|
-
icon: "🗣️"
|
|
13530
|
+
name: "Speech"
|
|
13532
13531
|
},
|
|
13533
13532
|
{
|
|
13534
13533
|
id: "scream",
|
|
13535
|
-
name: "Scream / Shout"
|
|
13536
|
-
icon: "😱"
|
|
13534
|
+
name: "Scream / Shout"
|
|
13537
13535
|
},
|
|
13538
13536
|
{
|
|
13539
13537
|
id: "crying",
|
|
13540
|
-
name: "Crying / Baby"
|
|
13541
|
-
icon: "😢"
|
|
13538
|
+
name: "Crying / Baby"
|
|
13542
13539
|
},
|
|
13543
13540
|
{
|
|
13544
13541
|
id: "laughter",
|
|
13545
|
-
name: "Laughter"
|
|
13546
|
-
icon: "😂"
|
|
13542
|
+
name: "Laughter"
|
|
13547
13543
|
},
|
|
13548
13544
|
{
|
|
13549
13545
|
id: "music",
|
|
13550
|
-
name: "Music"
|
|
13551
|
-
icon: "🎵"
|
|
13546
|
+
name: "Music"
|
|
13552
13547
|
},
|
|
13553
13548
|
{
|
|
13554
13549
|
id: "dog",
|
|
13555
|
-
name: "Dog"
|
|
13556
|
-
icon: "🐕"
|
|
13550
|
+
name: "Dog"
|
|
13557
13551
|
},
|
|
13558
13552
|
{
|
|
13559
13553
|
id: "cat",
|
|
13560
|
-
name: "Cat"
|
|
13561
|
-
icon: "🐈"
|
|
13554
|
+
name: "Cat"
|
|
13562
13555
|
},
|
|
13563
13556
|
{
|
|
13564
13557
|
id: "bird",
|
|
13565
|
-
name: "Bird"
|
|
13566
|
-
icon: "🐦"
|
|
13558
|
+
name: "Bird"
|
|
13567
13559
|
},
|
|
13568
13560
|
{
|
|
13569
13561
|
id: "animal",
|
|
13570
|
-
name: "Animal (other)"
|
|
13571
|
-
icon: "🐾"
|
|
13562
|
+
name: "Animal (other)"
|
|
13572
13563
|
},
|
|
13573
13564
|
{
|
|
13574
13565
|
id: "alarm",
|
|
13575
|
-
name: "Alarm / Siren"
|
|
13576
|
-
icon: "🚨"
|
|
13566
|
+
name: "Alarm / Siren"
|
|
13577
13567
|
},
|
|
13578
13568
|
{
|
|
13579
13569
|
id: "doorbell",
|
|
13580
|
-
name: "Doorbell / Knock"
|
|
13581
|
-
icon: "🔔"
|
|
13570
|
+
name: "Doorbell / Knock"
|
|
13582
13571
|
},
|
|
13583
13572
|
{
|
|
13584
13573
|
id: "glass_breaking",
|
|
13585
|
-
name: "Glass Breaking"
|
|
13586
|
-
icon: "💥"
|
|
13574
|
+
name: "Glass Breaking"
|
|
13587
13575
|
},
|
|
13588
13576
|
{
|
|
13589
13577
|
id: "gunshot",
|
|
13590
|
-
name: "Gunshot / Explosion"
|
|
13591
|
-
icon: "💣"
|
|
13578
|
+
name: "Gunshot / Explosion"
|
|
13592
13579
|
},
|
|
13593
13580
|
{
|
|
13594
13581
|
id: "vehicle",
|
|
13595
|
-
name: "Vehicle"
|
|
13596
|
-
icon: "🚗"
|
|
13582
|
+
name: "Vehicle"
|
|
13597
13583
|
},
|
|
13598
13584
|
{
|
|
13599
13585
|
id: "siren",
|
|
13600
|
-
name: "Emergency Siren"
|
|
13601
|
-
icon: "🚑"
|
|
13586
|
+
name: "Emergency Siren"
|
|
13602
13587
|
},
|
|
13603
13588
|
{
|
|
13604
13589
|
id: "fire",
|
|
13605
|
-
name: "Fire / Smoke"
|
|
13606
|
-
icon: "🔥"
|
|
13590
|
+
name: "Fire / Smoke"
|
|
13607
13591
|
},
|
|
13608
13592
|
{
|
|
13609
13593
|
id: "water",
|
|
13610
|
-
name: "Water"
|
|
13611
|
-
icon: "💧"
|
|
13594
|
+
name: "Water"
|
|
13612
13595
|
},
|
|
13613
13596
|
{
|
|
13614
13597
|
id: "wind",
|
|
13615
|
-
name: "Wind / Weather"
|
|
13616
|
-
icon: "🌬️"
|
|
13598
|
+
name: "Wind / Weather"
|
|
13617
13599
|
},
|
|
13618
13600
|
{
|
|
13619
13601
|
id: "door",
|
|
13620
|
-
name: "Door"
|
|
13621
|
-
icon: "🚪"
|
|
13602
|
+
name: "Door"
|
|
13622
13603
|
},
|
|
13623
13604
|
{
|
|
13624
13605
|
id: "footsteps",
|
|
13625
|
-
name: "Footsteps"
|
|
13626
|
-
icon: "👣"
|
|
13606
|
+
name: "Footsteps"
|
|
13627
13607
|
},
|
|
13628
13608
|
{
|
|
13629
13609
|
id: "crowd",
|
|
13630
|
-
name: "Crowd / Chatter"
|
|
13631
|
-
icon: "👥"
|
|
13610
|
+
name: "Crowd / Chatter"
|
|
13632
13611
|
},
|
|
13633
13612
|
{
|
|
13634
13613
|
id: "telephone",
|
|
13635
|
-
name: "Telephone"
|
|
13636
|
-
icon: "📞"
|
|
13614
|
+
name: "Telephone"
|
|
13637
13615
|
},
|
|
13638
13616
|
{
|
|
13639
13617
|
id: "engine",
|
|
13640
|
-
name: "Engine / Motor"
|
|
13641
|
-
icon: "⚙️"
|
|
13618
|
+
name: "Engine / Motor"
|
|
13642
13619
|
},
|
|
13643
13620
|
{
|
|
13644
13621
|
id: "tools",
|
|
13645
|
-
name: "Tools / Construction"
|
|
13646
|
-
icon: "🔨"
|
|
13622
|
+
name: "Tools / Construction"
|
|
13647
13623
|
},
|
|
13648
13624
|
{
|
|
13649
13625
|
id: "silence",
|
|
13650
|
-
name: "Silence"
|
|
13651
|
-
icon: "🤫"
|
|
13626
|
+
name: "Silence"
|
|
13652
13627
|
}
|
|
13653
13628
|
];
|
|
13654
13629
|
var YAMNET_TO_MACRO = {
|
|
@@ -16112,7 +16087,7 @@ var TrackEnvelopeSchema = object({
|
|
|
16112
16087
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
16113
16088
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
16114
16089
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
16115
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
16090
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
16116
16091
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
16117
16092
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
16118
16093
|
* (`getObjectEvents` et al.).
|
|
@@ -16407,6 +16382,35 @@ var TrackSchema = object({
|
|
|
16407
16382
|
*/
|
|
16408
16383
|
hasFace: boolean().optional(),
|
|
16409
16384
|
/**
|
|
16385
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
16386
|
+
* face an operator could ASSIGN to an identity.
|
|
16387
|
+
*
|
|
16388
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
16389
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
16390
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
16391
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
16392
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
16393
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
16394
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
16395
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
16396
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
16397
|
+
* operator something to assign and delivers nothing.
|
|
16398
|
+
*
|
|
16399
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
16400
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
16401
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
16402
|
+
* `subLabel`; this says only that the raw material exists.
|
|
16403
|
+
*
|
|
16404
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
16405
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
16406
|
+
*
|
|
16407
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
16408
|
+
* before the column omits it, and so does every server that predates the
|
|
16409
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
16410
|
+
* never infer "no assignable face".
|
|
16411
|
+
*/
|
|
16412
|
+
hasEmbeddedFace: boolean().optional(),
|
|
16413
|
+
/**
|
|
16410
16414
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
16411
16415
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
16412
16416
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -17756,6 +17760,32 @@ var DetailResultSchema = object({
|
|
|
17756
17760
|
/** FRAME-space bbox (already mapped back from crop space). */
|
|
17757
17761
|
bbox: NativeCropBboxSchema.optional(),
|
|
17758
17762
|
embedding: string().optional(),
|
|
17763
|
+
/**
|
|
17764
|
+
* L2 magnitude of the RAW pre-normalization embedding. Additive and optional
|
|
17765
|
+
* so an older runner that does not send it degrades to "unmeasurable", which
|
|
17766
|
+
* the consuming gate treats as accept — never as reject.
|
|
17767
|
+
*/
|
|
17768
|
+
embeddingMagnitude: number().optional(),
|
|
17769
|
+
/**
|
|
17770
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
17771
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
17772
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
17773
|
+
* the inference this model exists to forbid.
|
|
17774
|
+
*
|
|
17775
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
17776
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
17777
|
+
* its previous assumption instead of refusing.
|
|
17778
|
+
*
|
|
17779
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
17780
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
17781
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
17782
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
17783
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
17784
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
17785
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
17786
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
17787
|
+
*/
|
|
17788
|
+
embeddingModelId: string().optional(),
|
|
17759
17789
|
label: string().optional(),
|
|
17760
17790
|
/**
|
|
17761
17791
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -18631,6 +18661,12 @@ var CameraStatusSchema = object({
|
|
|
18631
18661
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
18632
18662
|
fetchedAt: number()
|
|
18633
18663
|
});
|
|
18664
|
+
var InferenceDeviceExclusionReasonSchema = _enum([
|
|
18665
|
+
"disabled",
|
|
18666
|
+
"unavailable",
|
|
18667
|
+
"cannot-host-camera-root",
|
|
18668
|
+
"accelerator-preferred"
|
|
18669
|
+
]);
|
|
18634
18670
|
var NodeInferenceDeviceSchema = object({
|
|
18635
18671
|
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
18636
18672
|
key: string(),
|
|
@@ -18661,7 +18697,17 @@ var NodeInferenceDeviceSchema = object({
|
|
|
18661
18697
|
* available per format; this is the stored selection that becomes the
|
|
18662
18698
|
* default for EVERY camera landing on this accelerator.
|
|
18663
18699
|
*/
|
|
18664
|
-
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
18700
|
+
steps: record(string(), DeviceStepConfigSchema).optional(),
|
|
18701
|
+
/**
|
|
18702
|
+
* `null` when the device IS a camera-root candidate on this node; otherwise
|
|
18703
|
+
* the reason the dispatcher drops it. Computed by the SAME
|
|
18704
|
+
* `resolveInferenceDeviceEligibility` the dispatcher runs, so this view can
|
|
18705
|
+
* never disagree with the election — deriving it in the UI from
|
|
18706
|
+
* `enabled`/`available` would silently miss `cannot-host-camera-root` (needs
|
|
18707
|
+
* the node's model catalog) and `accelerator-preferred` (needs the node-wide
|
|
18708
|
+
* "an accelerator is serving" predicate).
|
|
18709
|
+
*/
|
|
18710
|
+
exclusion: InferenceDeviceExclusionReasonSchema.nullable()
|
|
18665
18711
|
});
|
|
18666
18712
|
var NodeInferenceDevicesSchema = object({
|
|
18667
18713
|
nodeId: string(),
|
|
@@ -19166,6 +19212,7 @@ DeviceType.Camera, method(object({
|
|
|
19166
19212
|
isBattery: boolean(),
|
|
19167
19213
|
reason: _enum([
|
|
19168
19214
|
"disabled",
|
|
19215
|
+
"offline",
|
|
19169
19216
|
"sleeping",
|
|
19170
19217
|
"unreachable",
|
|
19171
19218
|
"waking"
|
|
@@ -19211,9 +19258,17 @@ targets: array(object({
|
|
|
19211
19258
|
sleeping: boolean(),
|
|
19212
19259
|
/** Current device state rendered over the cached frame. State images
|
|
19213
19260
|
* remain authoritative even when their photographic background is
|
|
19214
|
-
* old; null means the link must carry a current camera frame.
|
|
19261
|
+
* old; null means the link must carry a current camera frame.
|
|
19262
|
+
*
|
|
19263
|
+
* **This is the ONLY source a surface may derive an inactive tile
|
|
19264
|
+
* from.** A client that reads a device's `online`/`disabled` flags and
|
|
19265
|
+
* draws its own verdict will disagree with the pixels it is painting
|
|
19266
|
+
* — the frame comes from here, and so must the sentence over it
|
|
19267
|
+
* (D190). Pair with `ageMs` for the age of the photograph behind the
|
|
19268
|
+
* state. */
|
|
19215
19269
|
stateReason: _enum([
|
|
19216
19270
|
"disabled",
|
|
19271
|
+
"offline",
|
|
19217
19272
|
"sleeping",
|
|
19218
19273
|
"unreachable",
|
|
19219
19274
|
"waking"
|
|
@@ -22433,7 +22488,12 @@ var ListResultSchema = object({
|
|
|
22433
22488
|
probedAt: number()
|
|
22434
22489
|
});
|
|
22435
22490
|
var PreferredSchema = LocalInterfaceSchema.nullable();
|
|
22436
|
-
|
|
22491
|
+
/**
|
|
22492
|
+
* Candidate base URL for the SDK to race on connect. Order matters —
|
|
22493
|
+
* the SDK should attempt these top-to-bottom with a short per-candidate
|
|
22494
|
+
* timeout (e.g. 1500ms) and cache the winner for the session.
|
|
22495
|
+
*/
|
|
22496
|
+
var ConnectionEndpointSchema = object({
|
|
22437
22497
|
/** Operator-facing label (e.g. "LAN — en0", "Public tunnel"). */
|
|
22438
22498
|
label: string(),
|
|
22439
22499
|
/** Fully-formed base URL with scheme + host + port. */
|
|
@@ -22476,7 +22536,42 @@ var GetConnectionEndpointsResultSchema = object({ endpoints: array(object({
|
|
|
22476
22536
|
* ordering between polls.
|
|
22477
22537
|
*/
|
|
22478
22538
|
priority: number()
|
|
22479
|
-
})
|
|
22539
|
+
});
|
|
22540
|
+
/**
|
|
22541
|
+
* Where the advertised local port came from. Ordered most → least
|
|
22542
|
+
* authoritative, and the whole point of returning it: a client must be able to
|
|
22543
|
+
* tell a FACT about the hub's socket from an echo of its own guess.
|
|
22544
|
+
*/
|
|
22545
|
+
var LocalPortSourceEnum = _enum([
|
|
22546
|
+
"server-config",
|
|
22547
|
+
"server-env",
|
|
22548
|
+
"caller-hint",
|
|
22549
|
+
"default"
|
|
22550
|
+
]);
|
|
22551
|
+
/** The port every LAN/loopback `baseUrl` in the same result was built with. */
|
|
22552
|
+
var AdvertisedLocalPortSchema = object({
|
|
22553
|
+
port: number().int().min(1).max(65535),
|
|
22554
|
+
source: LocalPortSourceEnum
|
|
22555
|
+
});
|
|
22556
|
+
var GetConnectionEndpointsResultSchema = object({
|
|
22557
|
+
endpoints: array(ConnectionEndpointSchema).readonly(),
|
|
22558
|
+
/**
|
|
22559
|
+
* The port the hub built the LAN/loopback URLs with, and where that number
|
|
22560
|
+
* came from.
|
|
22561
|
+
*
|
|
22562
|
+
* Returned rather than merely applied, because "the URL is right" and "the
|
|
22563
|
+
* client can KNOW the URL is right" are different properties. A client that
|
|
22564
|
+
* only sees a corrected URL cannot distinguish a hub that fixed the port from
|
|
22565
|
+
* a hub that echoed the port the client sent, so it cannot decide whether to
|
|
22566
|
+
* race the candidate or discard it. With `source` it can: anything but
|
|
22567
|
+
* `caller-hint` is the hub's own socket.
|
|
22568
|
+
*
|
|
22569
|
+
* Absent on hubs predating this field — a client that finds it missing is
|
|
22570
|
+
* talking to an echoing hub and must degrade exactly as it does for
|
|
22571
|
+
* `caller-hint`.
|
|
22572
|
+
*/
|
|
22573
|
+
localPort: AdvertisedLocalPortSchema
|
|
22574
|
+
});
|
|
22480
22575
|
/**
|
|
22481
22576
|
* The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
|
|
22482
22577
|
* AUTO (resolved from the candidate ranking at send time); `resolved` reports
|
|
@@ -22497,8 +22592,13 @@ var AllowedAddressesSchema = object({
|
|
|
22497
22592
|
*/
|
|
22498
22593
|
addresses: array(string()).readonly() });
|
|
22499
22594
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
22500
|
-
/**
|
|
22501
|
-
|
|
22595
|
+
/**
|
|
22596
|
+
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
22597
|
+
* written against the echoing contract keep working; the hub uses it
|
|
22598
|
+
* only when it cannot read its own port, and says so via
|
|
22599
|
+
* `localPort.source === 'caller-hint'`.
|
|
22600
|
+
*/
|
|
22601
|
+
port: number().int().min(1).max(65535).optional(),
|
|
22502
22602
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
22503
22603
|
* candidate. Default `true`. */
|
|
22504
22604
|
includeLoopback: boolean().optional(),
|
|
@@ -33422,7 +33522,6 @@ var NC_AUDIO_DEFAULTS = {
|
|
|
33422
33522
|
hitPercent: 60,
|
|
33423
33523
|
samplingSeconds: 10
|
|
33424
33524
|
};
|
|
33425
|
-
new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
|
|
33426
33525
|
new Set(["devices", "classes"]);
|
|
33427
33526
|
NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
|
|
33428
33527
|
/**
|
|
@@ -33656,6 +33755,39 @@ TimelapseRuleInputSchema.extend({
|
|
|
33656
33755
|
createdAt: number(),
|
|
33657
33756
|
updatedAt: number()
|
|
33658
33757
|
});
|
|
33758
|
+
Object.freeze(Object.fromEntries([{
|
|
33759
|
+
stepId: "face-embedding",
|
|
33760
|
+
label: "Face recognition model",
|
|
33761
|
+
defaultModelId: "arcface-r100",
|
|
33762
|
+
indexName: "the enrolled face gallery",
|
|
33763
|
+
options: [
|
|
33764
|
+
{
|
|
33765
|
+
id: "arcface-r100",
|
|
33766
|
+
label: "ArcFace (ResNet34)"
|
|
33767
|
+
},
|
|
33768
|
+
{
|
|
33769
|
+
id: "auraface-r100",
|
|
33770
|
+
label: "AuraFace R100"
|
|
33771
|
+
},
|
|
33772
|
+
{
|
|
33773
|
+
id: "inception-resnet-v1",
|
|
33774
|
+
label: "Inception ResNet V1"
|
|
33775
|
+
}
|
|
33776
|
+
]
|
|
33777
|
+
}, {
|
|
33778
|
+
stepId: "clip-embedding",
|
|
33779
|
+
label: "Semantic search model",
|
|
33780
|
+
defaultModelId: "mobileclip-s1",
|
|
33781
|
+
indexName: "the object semantic-search index",
|
|
33782
|
+
options: [{
|
|
33783
|
+
id: "mobileclip-s1",
|
|
33784
|
+
label: "MobileCLIP S1"
|
|
33785
|
+
}, {
|
|
33786
|
+
id: "mobileclip-s2",
|
|
33787
|
+
label: "MobileCLIP S2"
|
|
33788
|
+
}]
|
|
33789
|
+
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
33790
|
+
string().min(1);
|
|
33659
33791
|
object({
|
|
33660
33792
|
/**
|
|
33661
33793
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -33676,10 +33808,21 @@ object({
|
|
|
33676
33808
|
*/
|
|
33677
33809
|
square: boolean()
|
|
33678
33810
|
});
|
|
33679
|
-
|
|
33811
|
+
/**
|
|
33812
|
+
* The convention in force when nobody has configured one — byte-for-byte the
|
|
33813
|
+
* behaviour of the pre-unification LIVE path (`DETAIL_CROP_PADDING_RATIO`).
|
|
33814
|
+
*/
|
|
33815
|
+
var DEFAULT_DETAIL_CROP_CONVENTION = {
|
|
33680
33816
|
paddingRatio: .15,
|
|
33681
33817
|
square: false
|
|
33682
|
-
}
|
|
33818
|
+
};
|
|
33819
|
+
Object.freeze({
|
|
33820
|
+
x: 0,
|
|
33821
|
+
y: 0,
|
|
33822
|
+
w: 1,
|
|
33823
|
+
h: 1
|
|
33824
|
+
});
|
|
33825
|
+
DEFAULT_DETAIL_CROP_CONVENTION.paddingRatio;
|
|
33683
33826
|
/**
|
|
33684
33827
|
* WHICH delivered frames the decode worker retains a native copy of.
|
|
33685
33828
|
*
|
|
@@ -7549,7 +7549,7 @@ var RecordingBandSchema = object({
|
|
|
7549
7549
|
postBufferSec: number().min(0).optional()
|
|
7550
7550
|
});
|
|
7551
7551
|
({
|
|
7552
|
-
preBufferSec:
|
|
7552
|
+
preBufferSec: 15,
|
|
7553
7553
|
postBufferSec: 30
|
|
7554
7554
|
}).postBufferSec * 1e3;
|
|
7555
7555
|
/**
|
|
@@ -13527,128 +13527,103 @@ var COCO_TO_MACRO = {
|
|
|
13527
13527
|
var AUDIO_MACRO_LABELS = [
|
|
13528
13528
|
{
|
|
13529
13529
|
id: "speech",
|
|
13530
|
-
name: "Speech"
|
|
13531
|
-
icon: "🗣️"
|
|
13530
|
+
name: "Speech"
|
|
13532
13531
|
},
|
|
13533
13532
|
{
|
|
13534
13533
|
id: "scream",
|
|
13535
|
-
name: "Scream / Shout"
|
|
13536
|
-
icon: "😱"
|
|
13534
|
+
name: "Scream / Shout"
|
|
13537
13535
|
},
|
|
13538
13536
|
{
|
|
13539
13537
|
id: "crying",
|
|
13540
|
-
name: "Crying / Baby"
|
|
13541
|
-
icon: "😢"
|
|
13538
|
+
name: "Crying / Baby"
|
|
13542
13539
|
},
|
|
13543
13540
|
{
|
|
13544
13541
|
id: "laughter",
|
|
13545
|
-
name: "Laughter"
|
|
13546
|
-
icon: "😂"
|
|
13542
|
+
name: "Laughter"
|
|
13547
13543
|
},
|
|
13548
13544
|
{
|
|
13549
13545
|
id: "music",
|
|
13550
|
-
name: "Music"
|
|
13551
|
-
icon: "🎵"
|
|
13546
|
+
name: "Music"
|
|
13552
13547
|
},
|
|
13553
13548
|
{
|
|
13554
13549
|
id: "dog",
|
|
13555
|
-
name: "Dog"
|
|
13556
|
-
icon: "🐕"
|
|
13550
|
+
name: "Dog"
|
|
13557
13551
|
},
|
|
13558
13552
|
{
|
|
13559
13553
|
id: "cat",
|
|
13560
|
-
name: "Cat"
|
|
13561
|
-
icon: "🐈"
|
|
13554
|
+
name: "Cat"
|
|
13562
13555
|
},
|
|
13563
13556
|
{
|
|
13564
13557
|
id: "bird",
|
|
13565
|
-
name: "Bird"
|
|
13566
|
-
icon: "🐦"
|
|
13558
|
+
name: "Bird"
|
|
13567
13559
|
},
|
|
13568
13560
|
{
|
|
13569
13561
|
id: "animal",
|
|
13570
|
-
name: "Animal (other)"
|
|
13571
|
-
icon: "🐾"
|
|
13562
|
+
name: "Animal (other)"
|
|
13572
13563
|
},
|
|
13573
13564
|
{
|
|
13574
13565
|
id: "alarm",
|
|
13575
|
-
name: "Alarm / Siren"
|
|
13576
|
-
icon: "🚨"
|
|
13566
|
+
name: "Alarm / Siren"
|
|
13577
13567
|
},
|
|
13578
13568
|
{
|
|
13579
13569
|
id: "doorbell",
|
|
13580
|
-
name: "Doorbell / Knock"
|
|
13581
|
-
icon: "🔔"
|
|
13570
|
+
name: "Doorbell / Knock"
|
|
13582
13571
|
},
|
|
13583
13572
|
{
|
|
13584
13573
|
id: "glass_breaking",
|
|
13585
|
-
name: "Glass Breaking"
|
|
13586
|
-
icon: "💥"
|
|
13574
|
+
name: "Glass Breaking"
|
|
13587
13575
|
},
|
|
13588
13576
|
{
|
|
13589
13577
|
id: "gunshot",
|
|
13590
|
-
name: "Gunshot / Explosion"
|
|
13591
|
-
icon: "💣"
|
|
13578
|
+
name: "Gunshot / Explosion"
|
|
13592
13579
|
},
|
|
13593
13580
|
{
|
|
13594
13581
|
id: "vehicle",
|
|
13595
|
-
name: "Vehicle"
|
|
13596
|
-
icon: "🚗"
|
|
13582
|
+
name: "Vehicle"
|
|
13597
13583
|
},
|
|
13598
13584
|
{
|
|
13599
13585
|
id: "siren",
|
|
13600
|
-
name: "Emergency Siren"
|
|
13601
|
-
icon: "🚑"
|
|
13586
|
+
name: "Emergency Siren"
|
|
13602
13587
|
},
|
|
13603
13588
|
{
|
|
13604
13589
|
id: "fire",
|
|
13605
|
-
name: "Fire / Smoke"
|
|
13606
|
-
icon: "🔥"
|
|
13590
|
+
name: "Fire / Smoke"
|
|
13607
13591
|
},
|
|
13608
13592
|
{
|
|
13609
13593
|
id: "water",
|
|
13610
|
-
name: "Water"
|
|
13611
|
-
icon: "💧"
|
|
13594
|
+
name: "Water"
|
|
13612
13595
|
},
|
|
13613
13596
|
{
|
|
13614
13597
|
id: "wind",
|
|
13615
|
-
name: "Wind / Weather"
|
|
13616
|
-
icon: "🌬️"
|
|
13598
|
+
name: "Wind / Weather"
|
|
13617
13599
|
},
|
|
13618
13600
|
{
|
|
13619
13601
|
id: "door",
|
|
13620
|
-
name: "Door"
|
|
13621
|
-
icon: "🚪"
|
|
13602
|
+
name: "Door"
|
|
13622
13603
|
},
|
|
13623
13604
|
{
|
|
13624
13605
|
id: "footsteps",
|
|
13625
|
-
name: "Footsteps"
|
|
13626
|
-
icon: "👣"
|
|
13606
|
+
name: "Footsteps"
|
|
13627
13607
|
},
|
|
13628
13608
|
{
|
|
13629
13609
|
id: "crowd",
|
|
13630
|
-
name: "Crowd / Chatter"
|
|
13631
|
-
icon: "👥"
|
|
13610
|
+
name: "Crowd / Chatter"
|
|
13632
13611
|
},
|
|
13633
13612
|
{
|
|
13634
13613
|
id: "telephone",
|
|
13635
|
-
name: "Telephone"
|
|
13636
|
-
icon: "📞"
|
|
13614
|
+
name: "Telephone"
|
|
13637
13615
|
},
|
|
13638
13616
|
{
|
|
13639
13617
|
id: "engine",
|
|
13640
|
-
name: "Engine / Motor"
|
|
13641
|
-
icon: "⚙️"
|
|
13618
|
+
name: "Engine / Motor"
|
|
13642
13619
|
},
|
|
13643
13620
|
{
|
|
13644
13621
|
id: "tools",
|
|
13645
|
-
name: "Tools / Construction"
|
|
13646
|
-
icon: "🔨"
|
|
13622
|
+
name: "Tools / Construction"
|
|
13647
13623
|
},
|
|
13648
13624
|
{
|
|
13649
13625
|
id: "silence",
|
|
13650
|
-
name: "Silence"
|
|
13651
|
-
icon: "🤫"
|
|
13626
|
+
name: "Silence"
|
|
13652
13627
|
}
|
|
13653
13628
|
];
|
|
13654
13629
|
var YAMNET_TO_MACRO = {
|
|
@@ -16112,7 +16087,7 @@ var TrackEnvelopeSchema = object({
|
|
|
16112
16087
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
16113
16088
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
16114
16089
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
16115
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
16090
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
16116
16091
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
16117
16092
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
16118
16093
|
* (`getObjectEvents` et al.).
|
|
@@ -16407,6 +16382,35 @@ var TrackSchema = object({
|
|
|
16407
16382
|
*/
|
|
16408
16383
|
hasFace: boolean().optional(),
|
|
16409
16384
|
/**
|
|
16385
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
16386
|
+
* face an operator could ASSIGN to an identity.
|
|
16387
|
+
*
|
|
16388
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
16389
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
16390
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
16391
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
16392
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
16393
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
16394
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
16395
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
16396
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
16397
|
+
* operator something to assign and delivers nothing.
|
|
16398
|
+
*
|
|
16399
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
16400
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
16401
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
16402
|
+
* `subLabel`; this says only that the raw material exists.
|
|
16403
|
+
*
|
|
16404
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
16405
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
16406
|
+
*
|
|
16407
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
16408
|
+
* before the column omits it, and so does every server that predates the
|
|
16409
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
16410
|
+
* never infer "no assignable face".
|
|
16411
|
+
*/
|
|
16412
|
+
hasEmbeddedFace: boolean().optional(),
|
|
16413
|
+
/**
|
|
16410
16414
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
16411
16415
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
16412
16416
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -17756,6 +17760,32 @@ var DetailResultSchema = object({
|
|
|
17756
17760
|
/** FRAME-space bbox (already mapped back from crop space). */
|
|
17757
17761
|
bbox: NativeCropBboxSchema.optional(),
|
|
17758
17762
|
embedding: string().optional(),
|
|
17763
|
+
/**
|
|
17764
|
+
* L2 magnitude of the RAW pre-normalization embedding. Additive and optional
|
|
17765
|
+
* so an older runner that does not send it degrades to "unmeasurable", which
|
|
17766
|
+
* the consuming gate treats as accept — never as reject.
|
|
17767
|
+
*/
|
|
17768
|
+
embeddingMagnitude: number().optional(),
|
|
17769
|
+
/**
|
|
17770
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
17771
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
17772
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
17773
|
+
* the inference this model exists to forbid.
|
|
17774
|
+
*
|
|
17775
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
17776
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
17777
|
+
* its previous assumption instead of refusing.
|
|
17778
|
+
*
|
|
17779
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
17780
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
17781
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
17782
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
17783
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
17784
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
17785
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
17786
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
17787
|
+
*/
|
|
17788
|
+
embeddingModelId: string().optional(),
|
|
17759
17789
|
label: string().optional(),
|
|
17760
17790
|
/**
|
|
17761
17791
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -18631,6 +18661,12 @@ var CameraStatusSchema = object({
|
|
|
18631
18661
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
18632
18662
|
fetchedAt: number()
|
|
18633
18663
|
});
|
|
18664
|
+
var InferenceDeviceExclusionReasonSchema = _enum([
|
|
18665
|
+
"disabled",
|
|
18666
|
+
"unavailable",
|
|
18667
|
+
"cannot-host-camera-root",
|
|
18668
|
+
"accelerator-preferred"
|
|
18669
|
+
]);
|
|
18634
18670
|
var NodeInferenceDeviceSchema = object({
|
|
18635
18671
|
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
18636
18672
|
key: string(),
|
|
@@ -18661,7 +18697,17 @@ var NodeInferenceDeviceSchema = object({
|
|
|
18661
18697
|
* available per format; this is the stored selection that becomes the
|
|
18662
18698
|
* default for EVERY camera landing on this accelerator.
|
|
18663
18699
|
*/
|
|
18664
|
-
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
18700
|
+
steps: record(string(), DeviceStepConfigSchema).optional(),
|
|
18701
|
+
/**
|
|
18702
|
+
* `null` when the device IS a camera-root candidate on this node; otherwise
|
|
18703
|
+
* the reason the dispatcher drops it. Computed by the SAME
|
|
18704
|
+
* `resolveInferenceDeviceEligibility` the dispatcher runs, so this view can
|
|
18705
|
+
* never disagree with the election — deriving it in the UI from
|
|
18706
|
+
* `enabled`/`available` would silently miss `cannot-host-camera-root` (needs
|
|
18707
|
+
* the node's model catalog) and `accelerator-preferred` (needs the node-wide
|
|
18708
|
+
* "an accelerator is serving" predicate).
|
|
18709
|
+
*/
|
|
18710
|
+
exclusion: InferenceDeviceExclusionReasonSchema.nullable()
|
|
18665
18711
|
});
|
|
18666
18712
|
var NodeInferenceDevicesSchema = object({
|
|
18667
18713
|
nodeId: string(),
|
|
@@ -19166,6 +19212,7 @@ DeviceType.Camera, method(object({
|
|
|
19166
19212
|
isBattery: boolean(),
|
|
19167
19213
|
reason: _enum([
|
|
19168
19214
|
"disabled",
|
|
19215
|
+
"offline",
|
|
19169
19216
|
"sleeping",
|
|
19170
19217
|
"unreachable",
|
|
19171
19218
|
"waking"
|
|
@@ -19211,9 +19258,17 @@ targets: array(object({
|
|
|
19211
19258
|
sleeping: boolean(),
|
|
19212
19259
|
/** Current device state rendered over the cached frame. State images
|
|
19213
19260
|
* remain authoritative even when their photographic background is
|
|
19214
|
-
* old; null means the link must carry a current camera frame.
|
|
19261
|
+
* old; null means the link must carry a current camera frame.
|
|
19262
|
+
*
|
|
19263
|
+
* **This is the ONLY source a surface may derive an inactive tile
|
|
19264
|
+
* from.** A client that reads a device's `online`/`disabled` flags and
|
|
19265
|
+
* draws its own verdict will disagree with the pixels it is painting
|
|
19266
|
+
* — the frame comes from here, and so must the sentence over it
|
|
19267
|
+
* (D190). Pair with `ageMs` for the age of the photograph behind the
|
|
19268
|
+
* state. */
|
|
19215
19269
|
stateReason: _enum([
|
|
19216
19270
|
"disabled",
|
|
19271
|
+
"offline",
|
|
19217
19272
|
"sleeping",
|
|
19218
19273
|
"unreachable",
|
|
19219
19274
|
"waking"
|
|
@@ -22433,7 +22488,12 @@ var ListResultSchema = object({
|
|
|
22433
22488
|
probedAt: number()
|
|
22434
22489
|
});
|
|
22435
22490
|
var PreferredSchema = LocalInterfaceSchema.nullable();
|
|
22436
|
-
|
|
22491
|
+
/**
|
|
22492
|
+
* Candidate base URL for the SDK to race on connect. Order matters —
|
|
22493
|
+
* the SDK should attempt these top-to-bottom with a short per-candidate
|
|
22494
|
+
* timeout (e.g. 1500ms) and cache the winner for the session.
|
|
22495
|
+
*/
|
|
22496
|
+
var ConnectionEndpointSchema = object({
|
|
22437
22497
|
/** Operator-facing label (e.g. "LAN — en0", "Public tunnel"). */
|
|
22438
22498
|
label: string(),
|
|
22439
22499
|
/** Fully-formed base URL with scheme + host + port. */
|
|
@@ -22476,7 +22536,42 @@ var GetConnectionEndpointsResultSchema = object({ endpoints: array(object({
|
|
|
22476
22536
|
* ordering between polls.
|
|
22477
22537
|
*/
|
|
22478
22538
|
priority: number()
|
|
22479
|
-
})
|
|
22539
|
+
});
|
|
22540
|
+
/**
|
|
22541
|
+
* Where the advertised local port came from. Ordered most → least
|
|
22542
|
+
* authoritative, and the whole point of returning it: a client must be able to
|
|
22543
|
+
* tell a FACT about the hub's socket from an echo of its own guess.
|
|
22544
|
+
*/
|
|
22545
|
+
var LocalPortSourceEnum = _enum([
|
|
22546
|
+
"server-config",
|
|
22547
|
+
"server-env",
|
|
22548
|
+
"caller-hint",
|
|
22549
|
+
"default"
|
|
22550
|
+
]);
|
|
22551
|
+
/** The port every LAN/loopback `baseUrl` in the same result was built with. */
|
|
22552
|
+
var AdvertisedLocalPortSchema = object({
|
|
22553
|
+
port: number().int().min(1).max(65535),
|
|
22554
|
+
source: LocalPortSourceEnum
|
|
22555
|
+
});
|
|
22556
|
+
var GetConnectionEndpointsResultSchema = object({
|
|
22557
|
+
endpoints: array(ConnectionEndpointSchema).readonly(),
|
|
22558
|
+
/**
|
|
22559
|
+
* The port the hub built the LAN/loopback URLs with, and where that number
|
|
22560
|
+
* came from.
|
|
22561
|
+
*
|
|
22562
|
+
* Returned rather than merely applied, because "the URL is right" and "the
|
|
22563
|
+
* client can KNOW the URL is right" are different properties. A client that
|
|
22564
|
+
* only sees a corrected URL cannot distinguish a hub that fixed the port from
|
|
22565
|
+
* a hub that echoed the port the client sent, so it cannot decide whether to
|
|
22566
|
+
* race the candidate or discard it. With `source` it can: anything but
|
|
22567
|
+
* `caller-hint` is the hub's own socket.
|
|
22568
|
+
*
|
|
22569
|
+
* Absent on hubs predating this field — a client that finds it missing is
|
|
22570
|
+
* talking to an echoing hub and must degrade exactly as it does for
|
|
22571
|
+
* `caller-hint`.
|
|
22572
|
+
*/
|
|
22573
|
+
localPort: AdvertisedLocalPortSchema
|
|
22574
|
+
});
|
|
22480
22575
|
/**
|
|
22481
22576
|
* The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
|
|
22482
22577
|
* AUTO (resolved from the candidate ranking at send time); `resolved` reports
|
|
@@ -22497,8 +22592,13 @@ var AllowedAddressesSchema = object({
|
|
|
22497
22592
|
*/
|
|
22498
22593
|
addresses: array(string()).readonly() });
|
|
22499
22594
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
22500
|
-
/**
|
|
22501
|
-
|
|
22595
|
+
/**
|
|
22596
|
+
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
22597
|
+
* written against the echoing contract keep working; the hub uses it
|
|
22598
|
+
* only when it cannot read its own port, and says so via
|
|
22599
|
+
* `localPort.source === 'caller-hint'`.
|
|
22600
|
+
*/
|
|
22601
|
+
port: number().int().min(1).max(65535).optional(),
|
|
22502
22602
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
22503
22603
|
* candidate. Default `true`. */
|
|
22504
22604
|
includeLoopback: boolean().optional(),
|
|
@@ -33422,7 +33522,6 @@ var NC_AUDIO_DEFAULTS = {
|
|
|
33422
33522
|
hitPercent: 60,
|
|
33423
33523
|
samplingSeconds: 10
|
|
33424
33524
|
};
|
|
33425
|
-
new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
|
|
33426
33525
|
new Set(["devices", "classes"]);
|
|
33427
33526
|
NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
|
|
33428
33527
|
/**
|
|
@@ -33656,6 +33755,39 @@ TimelapseRuleInputSchema.extend({
|
|
|
33656
33755
|
createdAt: number(),
|
|
33657
33756
|
updatedAt: number()
|
|
33658
33757
|
});
|
|
33758
|
+
Object.freeze(Object.fromEntries([{
|
|
33759
|
+
stepId: "face-embedding",
|
|
33760
|
+
label: "Face recognition model",
|
|
33761
|
+
defaultModelId: "arcface-r100",
|
|
33762
|
+
indexName: "the enrolled face gallery",
|
|
33763
|
+
options: [
|
|
33764
|
+
{
|
|
33765
|
+
id: "arcface-r100",
|
|
33766
|
+
label: "ArcFace (ResNet34)"
|
|
33767
|
+
},
|
|
33768
|
+
{
|
|
33769
|
+
id: "auraface-r100",
|
|
33770
|
+
label: "AuraFace R100"
|
|
33771
|
+
},
|
|
33772
|
+
{
|
|
33773
|
+
id: "inception-resnet-v1",
|
|
33774
|
+
label: "Inception ResNet V1"
|
|
33775
|
+
}
|
|
33776
|
+
]
|
|
33777
|
+
}, {
|
|
33778
|
+
stepId: "clip-embedding",
|
|
33779
|
+
label: "Semantic search model",
|
|
33780
|
+
defaultModelId: "mobileclip-s1",
|
|
33781
|
+
indexName: "the object semantic-search index",
|
|
33782
|
+
options: [{
|
|
33783
|
+
id: "mobileclip-s1",
|
|
33784
|
+
label: "MobileCLIP S1"
|
|
33785
|
+
}, {
|
|
33786
|
+
id: "mobileclip-s2",
|
|
33787
|
+
label: "MobileCLIP S2"
|
|
33788
|
+
}]
|
|
33789
|
+
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
33790
|
+
string().min(1);
|
|
33659
33791
|
object({
|
|
33660
33792
|
/**
|
|
33661
33793
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -33676,10 +33808,21 @@ object({
|
|
|
33676
33808
|
*/
|
|
33677
33809
|
square: boolean()
|
|
33678
33810
|
});
|
|
33679
|
-
|
|
33811
|
+
/**
|
|
33812
|
+
* The convention in force when nobody has configured one — byte-for-byte the
|
|
33813
|
+
* behaviour of the pre-unification LIVE path (`DETAIL_CROP_PADDING_RATIO`).
|
|
33814
|
+
*/
|
|
33815
|
+
var DEFAULT_DETAIL_CROP_CONVENTION = {
|
|
33680
33816
|
paddingRatio: .15,
|
|
33681
33817
|
square: false
|
|
33682
|
-
}
|
|
33818
|
+
};
|
|
33819
|
+
Object.freeze({
|
|
33820
|
+
x: 0,
|
|
33821
|
+
y: 0,
|
|
33822
|
+
w: 1,
|
|
33823
|
+
h: 1
|
|
33824
|
+
});
|
|
33825
|
+
DEFAULT_DETAIL_CROP_CONVENTION.paddingRatio;
|
|
33683
33826
|
/**
|
|
33684
33827
|
* WHICH delivered frames the decode worker retains a native copy of.
|
|
33685
33828
|
*
|
|
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
enumerable: true
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
|
-
const require_dist = require("../dist-
|
|
24
|
+
const require_dist = require("../dist-j7oMFwvU.js");
|
|
25
25
|
let node_crypto = require("node:crypto");
|
|
26
26
|
let node_path = require("node:path");
|
|
27
27
|
node_path = __toESM(node_path);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as BaseAddon, c as boolean, d as number, f as object, m as EventCategory, n as defineCustomActions, o as _enum, p as string, r as networkAccessCapability, s as array, t as customAction, u as literal } from "../dist-
|
|
1
|
+
import { a as BaseAddon, c as boolean, d as number, f as object, m as EventCategory, n as defineCustomActions, o as _enum, p as string, r as networkAccessCapability, s as array, t as customAction, u as literal } from "../dist-CCB3dnL3.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("../dist-
|
|
2
|
+
const require_dist = require("../dist-j7oMFwvU.js");
|
|
3
3
|
//#region src/turn/cloudflare-turn.ts
|
|
4
4
|
/**
|
|
5
5
|
* Cloudflare returns ICE servers in several flavours depending on which
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as BaseAddon, c as boolean, d as number, f as object, i as turnProviderCapability, l as discriminatedUnion, n as defineCustomActions, p as string, t as customAction, u as literal } from "../dist-
|
|
1
|
+
import { a as BaseAddon, c as boolean, d as number, f as object, i as turnProviderCapability, l as discriminatedUnion, n as defineCustomActions, p as string, t as customAction, u as literal } from "../dist-CCB3dnL3.mjs";
|
|
2
2
|
//#region src/turn/cloudflare-turn.ts
|
|
3
3
|
/**
|
|
4
4
|
* Cloudflare returns ICE servers in several flavours depending on which
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-cloudflare",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.24",
|
|
4
4
|
"description": "Cloudflare bundle — Tunnel (network-access) + TURN relay (turn-provider). Multi-entry npm package shipping 2 addons under a single bundle.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|