@camstack/types 1.2.414 → 1.2.415
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 +4 -1798
- package/dist/addon.mjs +2 -1796
- package/dist/capabilities/camera-grid-layout.cap.d.ts +1 -1
- package/dist/capabilities/device-history.cap.d.ts +1 -1
- package/dist/capabilities/device-manager.cap.d.ts +2 -2
- package/dist/capabilities/notification-rules.cap.d.ts +2 -2
- package/dist/capabilities/osd-manager.cap.d.ts +1 -1
- package/dist/capabilities/pipeline-analytics.cap.d.ts +1 -1
- package/dist/capabilities/pipeline-runner.cap.d.ts +1 -1
- package/dist/capabilities/ptz.cap.d.ts +3 -3
- package/dist/capabilities/recording-export.cap.d.ts +1 -1
- package/dist/capabilities/scene-monitor.cap.d.ts +1 -1
- package/dist/capabilities/stream-signals.cap.d.ts +1 -1
- package/dist/capabilities/videoclips.cap.d.ts +2 -2
- package/dist/capabilities/viewer-ui.cap.d.ts +1 -1
- package/dist/catalogs/index.d.ts +1 -1
- package/dist/catalogs/{frigate-plus-classmap.d.ts → plus-catalog-classmap.d.ts} +25 -25
- package/dist/catalogs/root-model-supply.d.ts +3 -3
- package/dist/client.js +22 -22
- package/dist/client.mjs +22 -22
- package/dist/composition/cards/__fixtures__/stored-compositions.d.ts +2 -2
- package/dist/composition/customize/__fixtures__/refs.d.ts +1 -1
- package/dist/{composition-CSLSFGTO.js → composition-DsmkwP9-.js} +1 -1
- package/dist/{composition-BJ8iAZb3.mjs → composition-kEl9mevu.mjs} +1 -1
- package/dist/device/base-device-provider.d.ts +1 -1
- package/dist/device/device-state-handle.d.ts +1 -1
- package/dist/device/location-icon.d.ts +1 -1
- package/dist/device/site-zone.d.ts +2 -2
- package/dist/enums/event-category.d.ts +1 -1
- package/dist/enums.js +1 -1
- package/dist/enums.mjs +1 -1
- package/dist/{event-category-Ceif8n-v.mjs → event-category-DHXxB8t9.mjs} +1 -1
- package/dist/{event-category-DG6Vir8Z.js → event-category-DXZ3f9Q5.js} +1 -1
- package/dist/ffmpeg/fmp4-fragment-plane.d.ts +1 -1
- package/dist/ffmpeg/gif-derive.d.ts +1 -1
- package/dist/ffmpeg/process.d.ts +1 -1
- package/dist/generated/addon-cap-facts.d.ts +2 -0
- package/dist/geometry/subject-path.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1516 -1516
- package/dist/index.mjs +1510 -1510
- package/dist/interfaces/addon-peer-bytes.d.ts +1 -1
- package/dist/interfaces/agent.d.ts +1 -1
- package/dist/interfaces/birth-decision-ledger.d.ts +1 -1
- package/dist/interfaces/debug-note-archive.d.ts +1 -1
- package/dist/interfaces/inference-engine.d.ts +1 -1
- package/dist/interfaces/logging.d.ts +1 -1
- package/dist/metrics/failure-counters.d.ts +2 -2
- package/dist/node.js +2 -2
- package/dist/node.mjs +2 -2
- package/dist/notification/timelapse-rule.d.ts +1 -1
- package/dist/pipeline/root-face-crop.d.ts +1 -1
- package/dist/pipeline/second-pass/motion-crop-plan.d.ts +1 -1
- package/dist/pipeline/second-pass/small-subject-recovery.d.ts +4 -4
- package/dist/process/child-cost-registry.d.ts +1 -1
- package/dist/{sleep-CYfIZzGv.mjs → sleep-BErAxhul.mjs} +1982 -4
- package/dist/{sleep-UP964hNP.js → sleep-BPQ2ZyaI.js} +1999 -3
- package/dist/types/detection.d.ts +2 -2
- package/dist/types/models.d.ts +3 -3
- package/dist/types/overlay-layer.d.ts +1 -1
- package/dist/utils/addon-id.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_sleep = require("./sleep-
|
|
3
|
-
const require_event_category = require("./event-category-
|
|
4
|
-
const require_composition = require("./composition-
|
|
2
|
+
const require_sleep = require("./sleep-BPQ2ZyaI.js");
|
|
3
|
+
const require_event_category = require("./event-category-DXZ3f9Q5.js");
|
|
4
|
+
const require_composition = require("./composition-DsmkwP9-.js");
|
|
5
5
|
const require_node_color = require("./node-color.js");
|
|
6
6
|
const require_err_msg = require("./err-msg-BhVbr0NX.js");
|
|
7
7
|
const require_enums = require("./enums.js");
|
|
@@ -718,7 +718,7 @@ function gifDeriveSpeed(gifSpeed, videoSpeed) {
|
|
|
718
718
|
* runs at `fps / speed` in SOURCE time and `setpts` multiplies what survived.
|
|
719
719
|
* The trailing `fps` re-declares the rate, which is NOT redundant: `setpts`
|
|
720
720
|
* leaves the filter link advertising the sampled rate and the gif muxer
|
|
721
|
-
* believes the link — measured on
|
|
721
|
+
* believes the link — measured on 101 as a 3.01 s gif of ten frames.
|
|
722
722
|
*/
|
|
723
723
|
function gifFilterComplex(input) {
|
|
724
724
|
const speed = input.speed > 0 ? input.speed : 1;
|
|
@@ -2161,7 +2161,7 @@ function parseRetrainRevisionConflict(message) {
|
|
|
2161
2161
|
* ── Why a TABLE and not a log line ─────────────────────────────────────────
|
|
2162
2162
|
* `logs.query` is an in-memory ring. Measured on the live hub on 2026-09-08 it
|
|
2163
2163
|
* held 40 000 entries covering 38 minutes — the whole ring is under an hour of
|
|
2164
|
-
* fleet traffic. Every question this data is for ("how often, on camera
|
|
2164
|
+
* fleet traffic. Every question this data is for ("how often, on camera 102,
|
|
2165
2165
|
* over the week the operator complained about") outlives that ring by two
|
|
2166
2166
|
* orders of magnitude, and a previous investigation in this repo was blocked
|
|
2167
2167
|
* for precisely this reason. The gate ALREADY writes a log line per decision
|
|
@@ -2422,7 +2422,7 @@ var BirthDecisionQueryInputSchema = zod.z.object({
|
|
|
2422
2422
|
* - A per-device bound multiplies by the fleet — 30 cameras at 500 each is
|
|
2423
2423
|
* 15 000 rows to protect a corpus that only ever gets read fleet-wide (the
|
|
2424
2424
|
* thing being mined is "what keeps going wrong", not "what goes wrong on
|
|
2425
|
-
*
|
|
2425
|
+
* 102"). One global ceiling is one number to reason about.
|
|
2426
2426
|
* - An AGE bound would delete the corpus for being old, which is the failure
|
|
2427
2427
|
* being fixed: a note from six months ago is the most valuable row in the
|
|
2428
2428
|
* table precisely because the pattern it describes has had time to repeat.
|
|
@@ -4722,7 +4722,7 @@ var LogChannelDescriptorSchema = zod.z.object({
|
|
|
4722
4722
|
* `true` is a PROMISE with two halves, and both must hold: the gate is
|
|
4723
4723
|
* consulted with the numeric device id, AND every line the channel admits
|
|
4724
4724
|
* carries `tags: { deviceId }` with that same numeric id. The second half is
|
|
4725
|
-
* what makes `| json | deviceId="
|
|
4725
|
+
* what makes `| json | deviceId="102"` work in Loki — `loki-payload.ts`
|
|
4726
4726
|
* keeps `deviceId` out of the stream labels for cardinality, so the tag in
|
|
4727
4727
|
* the body is the only way to filter.
|
|
4728
4728
|
*
|
|
@@ -5037,8 +5037,8 @@ function createLogChannelsProvider(logger, options = {}) {
|
|
|
5037
5037
|
*
|
|
5038
5038
|
* The key is the numeric `deviceId` — the same value every log line in this
|
|
5039
5039
|
* repo carries as `tags.deviceId`. There is no fleet-total mode and no
|
|
5040
|
-
* device-less bucket, because the question is always "why is
|
|
5041
|
-
*
|
|
5040
|
+
* device-less bucket, because the question is always "why is 102 worse than
|
|
5041
|
+
* 101?" and a fleet total cannot answer it. A caller that cannot name the
|
|
5042
5042
|
* camera must not note anything: an unnamed per-camera count is
|
|
5043
5043
|
* indistinguishable from a shared one, which is how one camera's failures
|
|
5044
5044
|
* quietly become everybody's.
|
|
@@ -5967,7 +5967,7 @@ function effectFor(stepId, label) {
|
|
|
5967
5967
|
* - label kind: a label counts for a step only when the classMap sends it to
|
|
5968
5968
|
* that step's macro AND it names a vocabulary entry. Every root is judged
|
|
5969
5969
|
* the same way — a COCO model supplies the animal classifier with the six
|
|
5970
|
-
* species COCO names, exactly as a
|
|
5970
|
+
* species COCO names, exactly as a plus catalog model supplies seven.
|
|
5971
5971
|
* - crop kind: the labelmap carries one of the step's root labels. Those
|
|
5972
5972
|
* labels are deliberately left out of the classMap, so they never make a
|
|
5973
5973
|
* track of their own.
|
|
@@ -6252,7 +6252,7 @@ var ModelVariantGroupSchema = zod.z.object({
|
|
|
6252
6252
|
precision: zod.z.enum(["fp32", "int8"]).optional(),
|
|
6253
6253
|
/**
|
|
6254
6254
|
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
6255
|
-
* an alternate training of the same family (
|
|
6255
|
+
* an alternate training of the same family (plugin catalog `relu_test`); chip
|
|
6256
6256
|
* label is "Test".
|
|
6257
6257
|
*/
|
|
6258
6258
|
optimization: zod.z.enum(["standard", "test"]).optional(),
|
|
@@ -6267,7 +6267,7 @@ var ModelVariantGroupSchema = zod.z.object({
|
|
|
6267
6267
|
});
|
|
6268
6268
|
/**
|
|
6269
6269
|
* Where a catalog entry came from. The pipeline stepper partitions the picker
|
|
6270
|
-
* by this id (CamStack /
|
|
6270
|
+
* by this id (CamStack / plus catalog / plugin catalog / Custom). Absent on older durable
|
|
6271
6271
|
* registry rows — {@link inferModelProvider} fills it at read time. Built-in
|
|
6272
6272
|
* catalog entries omit it and `getSchema` treats them as `camstack`.
|
|
6273
6273
|
*/
|
|
@@ -6280,9 +6280,9 @@ var MODEL_PROVIDER_IDS = [
|
|
|
6280
6280
|
var ModelProviderIdSchema = zod.z.enum(MODEL_PROVIDER_IDS);
|
|
6281
6281
|
/**
|
|
6282
6282
|
* Resolve a catalog entry's picker provider. An explicit stamp always wins;
|
|
6283
|
-
* otherwise
|
|
6283
|
+
* otherwise plus catalog/plugin catalog are recognised from id prefix or description.
|
|
6284
6284
|
* Unstamped BYO registry rows fall through to `custom`. Family `yolov9` is
|
|
6285
|
-
* NOT a
|
|
6285
|
+
* NOT a plugin catalog signal — CamStack ships that family too.
|
|
6286
6286
|
*/
|
|
6287
6287
|
function inferModelProvider(entry) {
|
|
6288
6288
|
if (entry.provider !== void 0) return entry.provider;
|
|
@@ -6526,8 +6526,8 @@ var ModelCatalogEntrySchema = zod.z.object({
|
|
|
6526
6526
|
provider: ModelProviderIdSchema.optional(),
|
|
6527
6527
|
/**
|
|
6528
6528
|
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
6529
|
-
* applies (
|
|
6530
|
-
* labels already ARE the CamStack macros (
|
|
6529
|
+
* applies (plus catalog / COCO public catalog). Set on a custom model whose raw
|
|
6530
|
+
* labels already ARE the CamStack macros (plugin catalog identity map).
|
|
6531
6531
|
*/
|
|
6532
6532
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
6533
6533
|
/**
|
|
@@ -11624,7 +11624,7 @@ var streamBrokerCapability = {
|
|
|
11624
11624
|
* `1` is real time and is the ONLY value that allows the copy branch —
|
|
11625
11625
|
* anything else forces `libx264` over the window. That was priced
|
|
11626
11626
|
* before it was chosen: a per-event burst measured at 0.23 s and 254 KB
|
|
11627
|
-
* on a real
|
|
11627
|
+
* on a real 101 720p cut, against 922 KB for the copy it replaces. A
|
|
11628
11628
|
* re-encode is capped at 720p (`EVENT_CLIP_ENCODE_MAX_WIDTH`), because
|
|
11629
11629
|
* once the decode is forced the width stops being free.
|
|
11630
11630
|
*/
|
|
@@ -15453,7 +15453,7 @@ var deviceHistoryCapability = {
|
|
|
15453
15453
|
listSeries: require_sleep.method(zod.z.object({ deviceId: zod.z.number().int() }), zod.z.array(SeriesInfoSchema).readonly()),
|
|
15454
15454
|
/**
|
|
15455
15455
|
* A NODE's series. The subject is `forNodeId`, never `nodeId`: a top-level
|
|
15456
|
-
* `nodeId` is the cap ROUTING key, and `nodeId: '
|
|
15456
|
+
* `nodeId` is the cap ROUTING key, and `nodeId: 'agent-a'` sent the
|
|
15457
15457
|
* read to that agent, which hosts no device-history.
|
|
15458
15458
|
*/
|
|
15459
15459
|
listNodeSeries: require_sleep.method(zod.z.object({ forNodeId: zod.z.string().min(1) }), zod.z.array(SeriesInfoSchema).readonly(), { auth: "admin" }),
|
|
@@ -37075,7 +37075,7 @@ var LOCATION_ICON_FALLBACK = "map-pin";
|
|
|
37075
37075
|
* `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
|
|
37076
37076
|
* operator's casing. The registry matches labels trimmed + case-insensitively
|
|
37077
37077
|
* everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
|
|
37078
|
-
* case-only rename (`
|
|
37078
|
+
* case-only rename (`kitchen` → `Kitchen`) is a real edit this repo supports; a
|
|
37079
37079
|
* map keyed on the displayed casing would orphan its entry on exactly that
|
|
37080
37080
|
* edit. Consumers join by keying their own label through `locationIconKey`.
|
|
37081
37081
|
*/
|
|
@@ -37120,7 +37120,7 @@ var LocationDescriptionAssignmentSchema = zod.z.object({
|
|
|
37120
37120
|
/**
|
|
37121
37121
|
* A SITE ZONE — a named part of the property that several locations belong to.
|
|
37122
37122
|
*
|
|
37123
|
-
* "
|
|
37123
|
+
* "Night zone" holds every bedroom; "Zona giorno" the living room and the
|
|
37124
37124
|
* kitchen. A camera belongs to exactly one location, and a location to at most
|
|
37125
37125
|
* one zone, so a camera's zone is derived and never stored on the device: the
|
|
37126
37126
|
* whole point of this entity is that grouping rooms touches no device row.
|
|
@@ -37149,7 +37149,7 @@ var LocationDescriptionAssignmentSchema = zod.z.object({
|
|
|
37149
37149
|
* the locations inside it.
|
|
37150
37150
|
*
|
|
37151
37151
|
* The LABEL is carried alongside the key because the key is lossy on purpose —
|
|
37152
|
-
* a surface must show "
|
|
37152
|
+
* a surface must show "Night zone", not "night zone". Locations are carried
|
|
37153
37153
|
* here, rather than left to a second call, because every consumer wants both
|
|
37154
37154
|
* at once and a viewer that asked twice could render a zone whose membership
|
|
37155
37155
|
* it has not fetched yet.
|
|
@@ -38069,7 +38069,7 @@ var deviceManagerCapability = {
|
|
|
38069
38069
|
* The room's ICON travels with the rename, including when `from` was
|
|
38070
38070
|
* never registered — otherwise it orphans on a key no location carries
|
|
38071
38071
|
* any more. A merge keeps the TARGET's icon when it has one: renaming
|
|
38072
|
-
* "Sala" into "
|
|
38072
|
+
* "Sala" into "Hall" moves devices into Hall, it does not restyle
|
|
38073
38073
|
* it. */
|
|
38074
38074
|
renameLocation: require_sleep.method(zod.z.object({
|
|
38075
38075
|
from: zod.z.string(),
|
|
@@ -38141,7 +38141,7 @@ var deviceManagerCapability = {
|
|
|
38141
38141
|
auth: "admin"
|
|
38142
38142
|
}),
|
|
38143
38143
|
/** Every SITE ZONE — a named part of the property that groups locations
|
|
38144
|
-
* ("
|
|
38144
|
+
* ("Night zone" holds the bedrooms). One call answers the whole picture:
|
|
38145
38145
|
* key, the label as typed, the icon, and the locations inside.
|
|
38146
38146
|
*
|
|
38147
38147
|
* Together, because a surface that asked for membership separately could
|
|
@@ -39845,7 +39845,7 @@ function validateCustomAddress(raw) {
|
|
|
39845
39845
|
const trimmed = raw.trim();
|
|
39846
39846
|
if (trimmed === "") return {
|
|
39847
39847
|
ok: false,
|
|
39848
|
-
reason: "Enter an address, e.g. https://192.
|
|
39848
|
+
reason: "Enter an address, e.g. https://192.0.2.20:4443."
|
|
39849
39849
|
};
|
|
39850
39850
|
let parsed;
|
|
39851
39851
|
try {
|
|
@@ -41016,8 +41016,8 @@ var LoadContributionSchema = zod.z.object({
|
|
|
41016
41016
|
deviceId: zod.z.number().int().positive().nullable(),
|
|
41017
41017
|
attribution: zod.z.enum(LOAD_CONTRIBUTION_ATTRIBUTIONS),
|
|
41018
41018
|
/**
|
|
41019
|
-
* What ONE entry is, in the contributor's own words — `
|
|
41020
|
-
* `
|
|
41019
|
+
* What ONE entry is, in the contributor's own words — `101/high`,
|
|
41020
|
+
* `102/native`, `cuda:0 shared pool`. Free text because the unit differs per
|
|
41021
41021
|
* family and inventing a common one would lose the only information that
|
|
41022
41022
|
* makes two entries for the same camera distinguishable.
|
|
41023
41023
|
*/
|
|
@@ -45079,7 +45079,7 @@ var NcConditionsSchema = zod.z.object({
|
|
|
45079
45079
|
* with the list under it is worse than no switch (D62).
|
|
45080
45080
|
*
|
|
45081
45081
|
* MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
|
|
45082
|
-
* renameable, and a rule authored on "
|
|
45082
|
+
* renameable, and a rule authored on "Alice" went silently dark the moment
|
|
45083
45083
|
* the operator fixed the spelling. The id reaches the record on
|
|
45084
45084
|
* `LabelAttribution.identityId`; the name is what the editor shows and what
|
|
45085
45085
|
* `{{label}}` renders.
|
|
@@ -45662,7 +45662,7 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
|
|
|
45662
45662
|
* A rule scoped to one camera and one zone silently became a rule that
|
|
45663
45663
|
* matches EVERY event on EVERY camera, and lost its `media` policy
|
|
45664
45664
|
* (zoneCrop / gif / clip / frame) and its `priority` at the same time. Seen
|
|
45665
|
-
* live on 2026-08-12: a rule scoped to device
|
|
45665
|
+
* live on 2026-08-12: a rule scoped to device 102 fired on 104 and 101
|
|
45666
45666
|
* within a minute of a two-field patch.
|
|
45667
45667
|
*
|
|
45668
45668
|
* So every defaulted field is re-declared here WITHOUT its default. The
|
|
@@ -47229,8 +47229,8 @@ var NcAlarmSensorsSchema = zod.z.object({
|
|
|
47229
47229
|
* own `sustainSeconds` (29 s on this hub), so its clip is anchored well in the
|
|
47230
47230
|
* past — and the other source, the recordings, cannot cover a recent moment:
|
|
47231
47231
|
* measured against `recording.getAvailability` for a 10 s window at several
|
|
47232
|
-
* anchors, full coverage arrived at −18 s on device
|
|
47233
|
-
*
|
|
47232
|
+
* anchors, full coverage arrived at −18 s on device 104 and −26 s on 101 and
|
|
47233
|
+
* 102. That edge is a PHASE of the 10-second segment cycle, not a number. The
|
|
47234
47234
|
* ring therefore has to hold the moment until the recordings can take it over:
|
|
47235
47235
|
* the worst measured phase (26 s) plus the confirmation lag (29 s) is 55 s, and
|
|
47236
47236
|
* 60 is the round number above it.
|
|
@@ -48583,7 +48583,7 @@ var LabelAttributionSchema = zod.z.object({
|
|
|
48583
48583
|
* `Identity.id` or a plate-gallery `Vehicle.id` (both `randomUUID`).
|
|
48584
48584
|
*
|
|
48585
48585
|
* The text alone is a DISPLAY NAME, and a display name is renameable: a
|
|
48586
|
-
* notification rule authored on "
|
|
48586
|
+
* notification rule authored on "Alice" stopped matching the moment the
|
|
48587
48587
|
* operator fixed the spelling in the gallery, and nothing said so. The id is
|
|
48588
48588
|
* the thing that does not move, so it is what a rule matches on
|
|
48589
48589
|
* (`NcConditions.identities`) and the text is what a human is shown.
|
|
@@ -51418,7 +51418,7 @@ var pipelineAnalyticsCapability = {
|
|
|
51418
51418
|
* audio, stopping at the first hit — so on the live hub, where object
|
|
51419
51419
|
* events own no media of their own and 299 883 of 300 559 media rows are
|
|
51420
51420
|
* motion-owned, EVERY object event resolved to its motion namesake. A
|
|
51421
|
-
* track from 17:34 on camera
|
|
51421
|
+
* track from 17:34 on camera 101 was served a snapshot from 22:35 eleven
|
|
51422
51422
|
* days earlier, silently.
|
|
51423
51423
|
*
|
|
51424
51424
|
* D476 had already disambiguated the KEY (`motion:` vs `object:`); this is
|
|
@@ -52084,7 +52084,7 @@ var pipelineExecutorCapability = {
|
|
|
52084
52084
|
/**
|
|
52085
52085
|
* Root-supplied detections for the tree's ROOT step (D730). Set by
|
|
52086
52086
|
* `runDetailSubtree` when the camera's root model supplies a crop-kind
|
|
52087
|
-
* step (a
|
|
52087
|
+
* step (a plus catalog `license_plate` for `plate-detection`): the step is
|
|
52088
52088
|
* NOT inferred, these boxes are its output, and its children (the plate
|
|
52089
52089
|
* reader) run on them through their own crop policy. Boxes are in the
|
|
52090
52090
|
* PIXELS of the image this call carries. Absent ⇒ the root step runs.
|
|
@@ -53879,7 +53879,7 @@ var RunnerCameraConfigSchema = zod.z.object({
|
|
|
53879
53879
|
* detection session that asks for history. What shipped was a last-moment
|
|
53880
53880
|
* discard — `FrameSlot`'s throttle compares wall clocks, and ~4 s of media
|
|
53881
53881
|
* arriving inside a few hundred ms of wall clock looks to it like one frame's
|
|
53882
|
-
* worth. Device
|
|
53882
|
+
* worth. Device 102, 2026-09-08: a re-run of the SAME model over the stored
|
|
53883
53883
|
* recording scored the subject `vehicle 0.5669` — above the 0.50 floor —
|
|
53884
53884
|
* 1.68 s BEFORE the live track was born, on a frame that was in the pre-roll,
|
|
53885
53885
|
* was decoded, and was freed.
|
|
@@ -54260,7 +54260,7 @@ var pipelineRunnerCapability = {
|
|
|
54260
54260
|
*
|
|
54261
54261
|
* The periodic recheck (`occupancyRecheckSec`, 300 s) exists to watch a
|
|
54262
54262
|
* still scene. It is the wrong instrument for a QUESTION that has just been
|
|
54263
|
-
* asked: on device
|
|
54263
|
+
* asked: on device 102 a parked car's departure was observed, a departure
|
|
54264
54264
|
* strike was armed — and then the motion session ended, the strike decayed
|
|
54265
54265
|
* after its 30 s TTL, and the next periodic look arrived up to five minutes
|
|
54266
54266
|
* later with nothing left to confirm. Every one of those departures was
|
|
@@ -57293,7 +57293,7 @@ var storageProviderCapability = {
|
|
|
57293
57293
|
* The signals a device can emit to WAKE its own stream.
|
|
57294
57294
|
*
|
|
57295
57295
|
* A camera whose stream is built on demand sleeps until something asks for it,
|
|
57296
|
-
* and "something" cannot be a consumer that is merely attached — a
|
|
57296
|
+
* and "something" cannot be a consumer that is merely attached — a external-catalog
|
|
57297
57297
|
* puller holds a session open for ever, and treating that as demand would keep
|
|
57298
57298
|
* a battery camera awake for ever, which is the whole thing the battery is for
|
|
57299
57299
|
* (D173). So the wake has to come from the CAMERA: an event it noticed by
|
|
@@ -58116,7 +58116,7 @@ var vectorStoreCapability = {
|
|
|
58116
58116
|
* device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
|
|
58117
58117
|
* what says a provider serves this camera, never the set of addons that
|
|
58118
58118
|
* happen to have registered the capability somewhere in the cluster. That is
|
|
58119
|
-
* what stopped one addon appearing three times on
|
|
58119
|
+
* what stopped one addon appearing three times on 107 — as the device's
|
|
58120
58120
|
* native provider, as the hub-local registration and as an
|
|
58121
58121
|
* `<addonId>@<nodeId>` one (D554 amended 2026-09-20).
|
|
58122
58122
|
*
|
|
@@ -58292,7 +58292,7 @@ var ClipSchema = zod.z.object({
|
|
|
58292
58292
|
* {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
|
|
58293
58293
|
*
|
|
58294
58294
|
* Bounded because it is not a payload the surface pages through: one visit on
|
|
58295
|
-
* device
|
|
58295
|
+
* device 101 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
|
|
58296
58296
|
* camera-day. Read {@link eventCount} for the true total.
|
|
58297
58297
|
*/
|
|
58298
58298
|
eventIds: zod.z.array(zod.z.string()).optional(),
|
|
@@ -58437,7 +58437,7 @@ var ClipPlaybackSchema = zod.z.object({
|
|
|
58437
58437
|
* camera has no recordings", which is the defect this whole line of work is
|
|
58438
58438
|
* about: a battery camera nobody woke (`sleeping`), a camera that could not be
|
|
58439
58439
|
* reached at all (`unreachable`, also what a provider that THREW reports), a
|
|
58440
|
-
* camera whose SD card is not mounted (`no-storage`, measured on
|
|
58440
|
+
* camera whose SD card is not mounted (`no-storage`, measured on 106 —
|
|
58441
58441
|
* `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
|
|
58442
58442
|
* camera whose OWN index disagrees with its OWN calendar (`index-empty`,
|
|
58443
58443
|
* measured on 618: the calendar marks 3–20 September, days 6–20 list zero
|
|
@@ -58898,7 +58898,7 @@ var videoclipsCapability = {
|
|
|
58898
58898
|
*
|
|
58899
58899
|
* It was optional, documented as "absent means the device's BOUND
|
|
58900
58900
|
* provider, which is CamStack on every camera". No code implemented
|
|
58901
|
-
* that. Measured on the live hub 2026-09-20 — device
|
|
58901
|
+
* that. Measured on the live hub 2026-09-20 — device 107, bound to
|
|
58902
58902
|
* `recorder` AND `provider-reolink` — a bare call with `limit: 3`
|
|
58903
58903
|
* answered SIX rows, three from each source, merged newest-first:
|
|
58904
58904
|
* `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
|
|
@@ -61616,7 +61616,7 @@ var GridLayoutCellSchema = zod.z.object({
|
|
|
61616
61616
|
*
|
|
61617
61617
|
* A grid's `high` composes its sources' `high` and its `low` their `low`, so a
|
|
61618
61618
|
* profile is on offer only when EVERY source can serve it. The refusal NAMES
|
|
61619
|
-
* the sources, because "this grid has no low" is not a finding — "
|
|
61619
|
+
* the sources, because "this grid has no low" is not a finding — "101 has no
|
|
61620
61620
|
* low" is, and it is the one an operator can act on.
|
|
61621
61621
|
*/
|
|
61622
61622
|
var GridProfileOfferSchema = zod.z.object({
|
|
@@ -67940,7 +67940,7 @@ setOverlay: require_sleep.method(zod.z.object({
|
|
|
67940
67940
|
* This cap owns the other half: a per-(camera, slot) BINDING that says
|
|
67941
67941
|
* which value feeds the slot, how it is formatted, and under which
|
|
67942
67942
|
* conditions it is shown at all. Named TEMPLATES combine many device
|
|
67943
|
-
* fields into one overlay string (
|
|
67943
|
+
* fields into one overlay string (plugin catalog OSD Manager parity).
|
|
67944
67944
|
*/
|
|
67945
67945
|
/**
|
|
67946
67946
|
* How a parser token expands one binding. Not stored on the binding —
|
|
@@ -70181,9 +70181,9 @@ var PtzOptionsSchema = zod.z.object({
|
|
|
70181
70181
|
* Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
|
|
70182
70182
|
* not one of the three cameras honours its own:
|
|
70183
70183
|
*
|
|
70184
|
-
*
|
|
70185
|
-
* 1438
|
|
70186
|
-
* 3836
|
|
70184
|
+
* 107 Camera camera Carol (reolink) preset 0 holds "stanza"
|
|
70185
|
+
* 1438 Camera dispensa (hikvision) preset 1 holds "Credenza"
|
|
70186
|
+
* 3836 Camera studio (amcrest) preset 1 holds "Preset1"
|
|
70187
70187
|
*
|
|
70188
70188
|
* So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
|
|
70189
70189
|
* and two of the three swallowed the failure in a bare `catch`. For autotrack
|
|
@@ -70807,7 +70807,7 @@ var RecordingAvailabilitySchema = zod.z.object({
|
|
|
70807
70807
|
* would look identical. But the answer used to say nothing about that, so a
|
|
70808
70808
|
* caller asking "what can I export?" read the single preferred profile as
|
|
70809
70809
|
* the only one that exists — on this deployment every camera records `high`
|
|
70810
|
-
* AND `low`, the low tree holding 14 GB for camera
|
|
70810
|
+
* AND `low`, the low tree holding 14 GB for camera 101 alone, and the export
|
|
70811
70811
|
* UI could not see it.
|
|
70812
70812
|
*
|
|
70813
70813
|
* Cheap: it is the same shallow directory read the profile CHOICE already
|
|
@@ -70906,7 +70906,7 @@ var RecordingSourceOptionsSchema = zod.z.object({
|
|
|
70906
70906
|
* `sparse` = gaps are the absence of one, and must be drawn as such.
|
|
70907
70907
|
*
|
|
70908
70908
|
* Not an onboard-only concession: measured 2026-09-24, OUR bar covers 98.8 %
|
|
70909
|
-
* of
|
|
70909
|
+
* of 107's day and 1.2 % of 1436's. It is a fact about a (source, camera)
|
|
70910
70910
|
* pair, and ours answers it per camera from `deriveRecordingMode`. */
|
|
70911
70911
|
coverage: zod.z.enum(["continuous", "sparse"]),
|
|
70912
70912
|
/** Where the playhead may be put.
|
|
@@ -71017,7 +71017,7 @@ var recordingCapability = {
|
|
|
71017
71017
|
* merely discouraged (D554 amended).
|
|
71018
71018
|
*
|
|
71019
71019
|
* It was learned the expensive way on `videoclips.listClips`: measured
|
|
71020
|
-
* on the live hub 2026-09-20, device
|
|
71020
|
+
* on the live hub 2026-09-20, device 107 bound to `recorder` AND
|
|
71021
71021
|
* `provider-reolink`, a bare call with `limit: 3` answered SIX rows,
|
|
71022
71022
|
* three from each source, merged — `device-collection-dispatch.ts`
|
|
71023
71023
|
* leaves an unpinned fan-out un-narrowed, so absence buys the union the
|
|
@@ -71860,7 +71860,7 @@ var ExportSpeedSchema = zod.z.number().min(.25).max(32);
|
|
|
71860
71860
|
* on a 10 h window holding 29,393 s of footage every range landed late by the
|
|
71861
71861
|
* gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
|
|
71862
71862
|
* the video was a uniform timelapse, and the log line reported the five ranges
|
|
71863
|
-
* that had been ASKED for (2026-08-13, export `57d14363`, camera
|
|
71863
|
+
* that had been ASKED for (2026-08-13, export `57d14363`, camera 101).
|
|
71864
71864
|
*
|
|
71865
71865
|
* Relative and not absolute epoch, because an absolute epoch would make every
|
|
71866
71866
|
* call site responsible for the same subtraction.
|
|
@@ -73101,7 +73101,7 @@ function reservedSourceOwner(capName, sourceId) {
|
|
|
73101
73101
|
* which put a "Scenes" tab on one camera's detail page. That is the wrong shape
|
|
73102
73102
|
* for the thing: a scene is a standing question about the property ("is the bin
|
|
73103
73103
|
* still out"), and the operator's question is "which of my scenes have tripped",
|
|
73104
|
-
* across every camera at once — not "what does camera
|
|
73104
|
+
* across every camera at once — not "what does camera 102 think". Buried one
|
|
73105
73105
|
* camera deep it also could not be found. The surface is now a top-level admin
|
|
73106
73106
|
* page (`/scenes`, `pages/Scenes.tsx`) that lists every scene on every camera and
|
|
73107
73107
|
* picks the camera inside the create flow, the same shape Events and Faces have.
|
|
@@ -79861,1313 +79861,209 @@ function formulaProblem(expr, bindings) {
|
|
|
79861
79861
|
});
|
|
79862
79862
|
}
|
|
79863
79863
|
//#endregion
|
|
79864
|
-
//#region src/
|
|
79865
|
-
|
|
79866
|
-
|
|
79867
|
-
|
|
79868
|
-
|
|
79869
|
-
|
|
79870
|
-
|
|
79871
|
-
addonWidgets: "addon-widgets",
|
|
79872
|
-
addonWidgetsSource: "addon-widgets-source",
|
|
79873
|
-
addons: "addons",
|
|
79874
|
-
adminUi: "admin-ui",
|
|
79875
|
-
airQualitySensor: "air-quality-sensor",
|
|
79876
|
-
alarmPanel: "alarm-panel",
|
|
79877
|
-
alerts: "alerts",
|
|
79878
|
-
ambientLightSensor: "ambient-light-sensor",
|
|
79879
|
-
audioAnalysis: "audio-analysis",
|
|
79880
|
-
audioAnalyzer: "audio-analyzer",
|
|
79881
|
-
audioCodec: "audio-codec",
|
|
79882
|
-
audioMetrics: "audio-metrics",
|
|
79883
|
-
authProvider: "auth-provider",
|
|
79884
|
-
automationControl: "automation-control",
|
|
79885
|
-
backup: "backup",
|
|
79886
|
-
battery: "battery",
|
|
79887
|
-
binary: "binary",
|
|
79888
|
-
brightness: "brightness",
|
|
79889
|
-
broker: "broker",
|
|
79890
|
-
button: "button",
|
|
79891
|
-
calendarSource: "calendar-source",
|
|
79892
|
-
calendars: "calendars",
|
|
79893
|
-
cameraCredentials: "camera-credentials",
|
|
79894
|
-
cameraGridLayout: "camera-grid-layout",
|
|
79895
|
-
cameraPipelineConfig: "camera-pipeline-config",
|
|
79896
|
-
cameraStreams: "camera-streams",
|
|
79897
|
-
carbonMonoxide: "carbon-monoxide",
|
|
79898
|
-
climateControl: "climate-control",
|
|
79899
|
-
color: "color",
|
|
79900
|
-
composer: "composer",
|
|
79901
|
-
connectionTest: "connection-test",
|
|
79902
|
-
connectivity: "connectivity",
|
|
79903
|
-
consumables: "consumables",
|
|
79904
|
-
contact: "contact",
|
|
79905
|
-
control: "control",
|
|
79906
|
-
coreBlocks: "core-blocks",
|
|
79907
|
-
cover: "cover",
|
|
79908
|
-
customModelRegistry: "custom-model-registry",
|
|
79909
|
-
dataStoreProvider: "data-store-provider",
|
|
79910
|
-
databaseSnapshot: "database-snapshot",
|
|
79911
|
-
dayNight: "day-night",
|
|
79912
|
-
decoder: "decoder",
|
|
79913
|
-
detectionPipeline: "detection-pipeline",
|
|
79914
|
-
deviceAdminLink: "device-admin-link",
|
|
79915
|
-
deviceAdoption: "device-adoption",
|
|
79916
|
-
deviceCredentials: "device-credentials",
|
|
79917
|
-
deviceDiscovery: "device-discovery",
|
|
79918
|
-
deviceExport: "device-export",
|
|
79919
|
-
deviceExtension: "device-extension",
|
|
79920
|
-
deviceHistory: "device-history",
|
|
79921
|
-
deviceManager: "device-manager",
|
|
79922
|
-
deviceOps: "device-ops",
|
|
79923
|
-
deviceProvider: "device-provider",
|
|
79924
|
-
deviceRemovalHook: "device-removal-hook",
|
|
79925
|
-
deviceState: "device-state",
|
|
79926
|
-
deviceStatus: "device-status",
|
|
79927
|
-
dishwasher: "dishwasher",
|
|
79928
|
-
displayPalette: "display-palette",
|
|
79929
|
-
doorbell: "doorbell",
|
|
79930
|
-
embeddingEncoder: "embedding-encoder",
|
|
79931
|
-
enumSensor: "enum-sensor",
|
|
79932
|
-
eventEmitter: "event-emitter",
|
|
79933
|
-
faceGallery: "face-gallery",
|
|
79934
|
-
failureContribution: "failure-contribution",
|
|
79935
|
-
fanControl: "fan-control",
|
|
79936
|
-
featureProbe: "feature-probe",
|
|
79937
|
-
filesystemBrowse: "filesystem-browse",
|
|
79938
|
-
flood: "flood",
|
|
79939
|
-
gas: "gas",
|
|
79940
|
-
heatingValve: "heating-valve",
|
|
79941
|
-
humidifier: "humidifier",
|
|
79942
|
-
humiditySensor: "humidity-sensor",
|
|
79943
|
-
image: "image",
|
|
79944
|
-
imageSettings: "image-settings",
|
|
79945
|
-
integrations: "integrations",
|
|
79946
|
-
intercom: "intercom",
|
|
79947
|
-
keychain: "keychain",
|
|
79948
|
-
keychainAdmin: "keychain-admin",
|
|
79949
|
-
lawnMowerControl: "lawn-mower-control",
|
|
79950
|
-
llm: "llm",
|
|
79951
|
-
llmRuntime: "llm-runtime",
|
|
79952
|
-
loadContribution: "load-contribution",
|
|
79953
|
-
localNetwork: "local-network",
|
|
79954
|
-
lockControl: "lock-control",
|
|
79955
|
-
logChannels: "log-channels",
|
|
79956
|
-
logDestination: "log-destination",
|
|
79957
|
-
loginMethod: "login-method",
|
|
79958
|
-
mediaPlayer: "media-player",
|
|
79959
|
-
meshNetwork: "mesh-network",
|
|
79960
|
-
metricsProvider: "metrics-provider",
|
|
79961
|
-
modelConvert: "model-convert",
|
|
79962
|
-
modelDistributor: "model-distributor",
|
|
79963
|
-
motion: "motion",
|
|
79964
|
-
motionDetection: "motion-detection",
|
|
79965
|
-
motionTrigger: "motion-trigger",
|
|
79966
|
-
motionZones: "motion-zones",
|
|
79967
|
-
mqttBroker: "mqtt-broker",
|
|
79968
|
-
nativeObjectDetection: "native-object-detection",
|
|
79969
|
-
navigation: "navigation",
|
|
79970
|
-
networkAccess: "network-access",
|
|
79971
|
-
networkLink: "network-link",
|
|
79972
|
-
networkQuality: "network-quality",
|
|
79973
|
-
nodeCertificates: "node-certificates",
|
|
79974
|
-
nodes: "nodes",
|
|
79975
|
-
notificationOutput: "notification-output",
|
|
79976
|
-
notificationRules: "notification-rules",
|
|
79977
|
-
notifier: "notifier",
|
|
79978
|
-
numericSensor: "numeric-sensor",
|
|
79979
|
-
oauthIntegration: "oauth-integration",
|
|
79980
|
-
oidcConnections: "oidc-connections",
|
|
79981
|
-
osd: "osd",
|
|
79982
|
-
osdManager: "osd-manager",
|
|
79983
|
-
petFeeder: "pet-feeder",
|
|
79984
|
-
pipelineAnalytics: "pipeline-analytics",
|
|
79985
|
-
pipelineExecutor: "pipeline-executor",
|
|
79986
|
-
pipelineOrchestrator: "pipeline-orchestrator",
|
|
79987
|
-
pipelineRunner: "pipeline-runner",
|
|
79988
|
-
plateGallery: "plate-gallery",
|
|
79989
|
-
platformProbe: "platform-probe",
|
|
79990
|
-
powerMeter: "power-meter",
|
|
79991
|
-
presence: "presence",
|
|
79992
|
-
pressureSensor: "pressure-sensor",
|
|
79993
|
-
privacyMask: "privacy-mask",
|
|
79994
|
-
ptz: "ptz",
|
|
79995
|
-
ptzAutotrack: "ptz-autotrack",
|
|
79996
|
-
reboot: "reboot",
|
|
79997
|
-
recordEntries: "record-entries",
|
|
79998
|
-
recording: "recording",
|
|
79999
|
-
recordingArchive: "recording-archive",
|
|
80000
|
-
recordingExport: "recording-export",
|
|
80001
|
-
recordingOnboard: "recording-onboard",
|
|
80002
|
-
recordingSignal: "recording-signal",
|
|
80003
|
-
records: "records",
|
|
80004
|
-
runningState: "running-state",
|
|
80005
|
-
sceneMonitor: "scene-monitor",
|
|
80006
|
-
scriptRunner: "script-runner",
|
|
80007
|
-
serverManagement: "server-management",
|
|
80008
|
-
settingsStore: "settings-store",
|
|
80009
|
-
smoke: "smoke",
|
|
80010
|
-
smtpProvider: "smtp-provider",
|
|
80011
|
-
snapshot: "snapshot",
|
|
80012
|
-
ssoBridge: "sso-bridge",
|
|
80013
|
-
storage: "storage",
|
|
80014
|
-
storageAdmin: "storage-admin",
|
|
80015
|
-
storageEvictable: "storage-evictable",
|
|
80016
|
-
storageMigration: "storage-migration",
|
|
80017
|
-
storageOccupancy: "storage-occupancy",
|
|
80018
|
-
storageProvider: "storage-provider",
|
|
80019
|
-
streamBroker: "stream-broker",
|
|
80020
|
-
streamCatalog: "stream-catalog",
|
|
80021
|
-
streamParams: "stream-params",
|
|
80022
|
-
streamSignals: "stream-signals",
|
|
80023
|
-
switch: "switch",
|
|
80024
|
-
system: "system",
|
|
80025
|
-
tamper: "tamper",
|
|
80026
|
-
temperatureSensor: "temperature-sensor",
|
|
80027
|
-
terminalSession: "terminal-session",
|
|
80028
|
-
toast: "toast",
|
|
80029
|
-
training: "training",
|
|
80030
|
-
trainingProvider: "training-provider",
|
|
80031
|
-
turnProvider: "turn-provider",
|
|
80032
|
-
update: "update",
|
|
80033
|
-
userManagement: "user-management",
|
|
80034
|
-
userPasskeys: "user-passkeys",
|
|
80035
|
-
vacuumControl: "vacuum-control",
|
|
80036
|
-
valve: "valve",
|
|
80037
|
-
vectorStore: "vector-store",
|
|
80038
|
-
vibration: "vibration",
|
|
80039
|
-
videoclips: "videoclips",
|
|
80040
|
-
viewerUi: "viewer-ui",
|
|
80041
|
-
waterHeater: "water-heater",
|
|
80042
|
-
weather: "weather",
|
|
80043
|
-
webrtcSession: "webrtc-session",
|
|
80044
|
-
zoneAnalytics: "zone-analytics",
|
|
80045
|
-
zoneRules: "zone-rules",
|
|
80046
|
-
zones: "zones"
|
|
79864
|
+
//#region src/composition/cards/role-cap.ts
|
|
79865
|
+
/**
|
|
79866
|
+
* Map a device role to the primary composition cap (D939).
|
|
79867
|
+
*/
|
|
79868
|
+
var ROLE_CAP_ALIASES = {
|
|
79869
|
+
[require_err_msg.DeviceRole.BinarySensor]: "binary",
|
|
79870
|
+
[require_err_msg.DeviceRole.MotionSensor]: "motion"
|
|
80047
79871
|
};
|
|
80048
|
-
|
|
80049
|
-
|
|
80050
|
-
|
|
80051
|
-
|
|
80052
|
-
|
|
80053
|
-
|
|
80054
|
-
|
|
80055
|
-
|
|
80056
|
-
|
|
80057
|
-
|
|
80058
|
-
|
|
80059
|
-
|
|
80060
|
-
|
|
80061
|
-
|
|
80062
|
-
|
|
80063
|
-
|
|
80064
|
-
|
|
80065
|
-
|
|
80066
|
-
|
|
80067
|
-
|
|
80068
|
-
|
|
80069
|
-
|
|
80070
|
-
|
|
80071
|
-
|
|
80072
|
-
|
|
80073
|
-
|
|
80074
|
-
|
|
80075
|
-
|
|
80076
|
-
|
|
80077
|
-
|
|
80078
|
-
|
|
80079
|
-
|
|
80080
|
-
|
|
80081
|
-
|
|
80082
|
-
|
|
80083
|
-
|
|
80084
|
-
|
|
80085
|
-
|
|
80086
|
-
|
|
80087
|
-
|
|
80088
|
-
|
|
80089
|
-
|
|
80090
|
-
|
|
80091
|
-
|
|
80092
|
-
|
|
80093
|
-
|
|
80094
|
-
|
|
80095
|
-
|
|
80096
|
-
|
|
80097
|
-
|
|
80098
|
-
|
|
80099
|
-
|
|
80100
|
-
|
|
80101
|
-
|
|
80102
|
-
|
|
80103
|
-
|
|
80104
|
-
|
|
80105
|
-
|
|
80106
|
-
|
|
80107
|
-
|
|
80108
|
-
|
|
80109
|
-
|
|
80110
|
-
|
|
80111
|
-
|
|
80112
|
-
|
|
80113
|
-
|
|
80114
|
-
|
|
80115
|
-
|
|
80116
|
-
|
|
80117
|
-
|
|
80118
|
-
|
|
80119
|
-
|
|
80120
|
-
|
|
80121
|
-
|
|
80122
|
-
|
|
80123
|
-
|
|
80124
|
-
|
|
80125
|
-
|
|
80126
|
-
|
|
80127
|
-
|
|
80128
|
-
|
|
80129
|
-
|
|
80130
|
-
|
|
80131
|
-
|
|
80132
|
-
|
|
80133
|
-
|
|
80134
|
-
|
|
80135
|
-
|
|
80136
|
-
|
|
80137
|
-
|
|
80138
|
-
|
|
80139
|
-
|
|
80140
|
-
|
|
80141
|
-
|
|
80142
|
-
|
|
80143
|
-
|
|
80144
|
-
|
|
80145
|
-
|
|
80146
|
-
|
|
80147
|
-
|
|
80148
|
-
|
|
80149
|
-
|
|
80150
|
-
|
|
80151
|
-
|
|
80152
|
-
|
|
80153
|
-
|
|
80154
|
-
|
|
80155
|
-
|
|
80156
|
-
|
|
80157
|
-
|
|
80158
|
-
|
|
80159
|
-
|
|
80160
|
-
|
|
80161
|
-
|
|
80162
|
-
|
|
80163
|
-
|
|
80164
|
-
|
|
80165
|
-
|
|
80166
|
-
|
|
80167
|
-
|
|
80168
|
-
|
|
80169
|
-
|
|
80170
|
-
|
|
80171
|
-
|
|
80172
|
-
|
|
80173
|
-
|
|
80174
|
-
|
|
80175
|
-
|
|
80176
|
-
|
|
80177
|
-
|
|
80178
|
-
{
|
|
80179
|
-
|
|
80180
|
-
|
|
80181
|
-
|
|
80182
|
-
|
|
80183
|
-
|
|
80184
|
-
|
|
80185
|
-
|
|
80186
|
-
|
|
80187
|
-
|
|
80188
|
-
|
|
80189
|
-
|
|
80190
|
-
|
|
80191
|
-
|
|
80192
|
-
|
|
80193
|
-
|
|
80194
|
-
|
|
80195
|
-
|
|
80196
|
-
|
|
80197
|
-
|
|
80198
|
-
|
|
80199
|
-
|
|
80200
|
-
|
|
80201
|
-
|
|
79872
|
+
var KNOWN_CAPS = new Set(require_sleep.CAP_NAMES);
|
|
79873
|
+
function primaryCapForRole(role) {
|
|
79874
|
+
if (role === null || role === "") return null;
|
|
79875
|
+
const aliased = ROLE_CAP_ALIASES[role];
|
|
79876
|
+
if (aliased !== void 0) return KNOWN_CAPS.has(aliased) ? aliased : null;
|
|
79877
|
+
return KNOWN_CAPS.has(role) ? role : null;
|
|
79878
|
+
}
|
|
79879
|
+
//#endregion
|
|
79880
|
+
//#region src/composition/cards/fill-status.ts
|
|
79881
|
+
function isUnfilledRequiredProblem(problem) {
|
|
79882
|
+
return problem.code === "missing-field";
|
|
79883
|
+
}
|
|
79884
|
+
function compositionFillStatus(problems) {
|
|
79885
|
+
return problems.some(isUnfilledRequiredProblem) ? "incomplete" : "complete";
|
|
79886
|
+
}
|
|
79887
|
+
/** True when the only problems are unfilled required fields — save may proceed. */
|
|
79888
|
+
function problemsBlockSave(problems) {
|
|
79889
|
+
return problems.some((p) => !isUnfilledRequiredProblem(p));
|
|
79890
|
+
}
|
|
79891
|
+
//#endregion
|
|
79892
|
+
//#region src/catalogs/plus-catalog-classmap.ts
|
|
79893
|
+
function isClassMapMacroTarget(value) {
|
|
79894
|
+
return CLASS_MAP_MACRO_TARGETS.some((target) => target === value);
|
|
79895
|
+
}
|
|
79896
|
+
/**
|
|
79897
|
+
* Raw plus catalog label → detection macro. Every label of the documented
|
|
79898
|
+
* plus catalog base set (docs.frigate.video/plus, verified 2026-08-21) is either
|
|
79899
|
+
* here or in {@link PLUS_CATALOG_UNMAPPED_LABELS}, with the reason it is not.
|
|
79900
|
+
*
|
|
79901
|
+
* Why this exists: a plus catalog import used to carry NO classMap, so it inherited
|
|
79902
|
+
* the step's `COCO_TO_MACRO` (`preserveOriginal: false`) and the executor
|
|
79903
|
+
* dropped every label COCO does not name — deer, raccoon, fox, squirrel, goat,
|
|
79904
|
+
* rabbit, skunk, kangaroo, possum, rodent, school_bus, garbage_truck and even
|
|
79905
|
+
* `package` vanished as `class-filter` discards. The executor keeps the raw
|
|
79906
|
+
* label as `originalClass` whenever the map resolves it, so the fine identity
|
|
79907
|
+
* survives under the macro.
|
|
79908
|
+
*/
|
|
79909
|
+
var PLUS_CATALOG_TO_MACRO = {
|
|
79910
|
+
person: "person",
|
|
79911
|
+
baby: "person",
|
|
79912
|
+
car: "vehicle",
|
|
79913
|
+
motorcycle: "vehicle",
|
|
79914
|
+
bicycle: "vehicle",
|
|
79915
|
+
boat: "vehicle",
|
|
79916
|
+
school_bus: "vehicle",
|
|
79917
|
+
garbage_truck: "vehicle",
|
|
79918
|
+
dog: "animal",
|
|
79919
|
+
cat: "animal",
|
|
79920
|
+
deer: "animal",
|
|
79921
|
+
horse: "animal",
|
|
79922
|
+
bird: "animal",
|
|
79923
|
+
raccoon: "animal",
|
|
79924
|
+
fox: "animal",
|
|
79925
|
+
bear: "animal",
|
|
79926
|
+
cow: "animal",
|
|
79927
|
+
squirrel: "animal",
|
|
79928
|
+
goat: "animal",
|
|
79929
|
+
rabbit: "animal",
|
|
79930
|
+
skunk: "animal",
|
|
79931
|
+
kangaroo: "animal",
|
|
79932
|
+
possum: "animal",
|
|
79933
|
+
rodent: "animal",
|
|
79934
|
+
package: "package"
|
|
79935
|
+
};
|
|
79936
|
+
/**
|
|
79937
|
+
* plus catalog labels deliberately left OUT of {@link PLUS_CATALOG_TO_MACRO}.
|
|
79938
|
+
*
|
|
79939
|
+
* - `attribute`: plus catalog emits these INSIDE a parent box (a face inside a
|
|
79940
|
+
* person, a plate or a carrier logo on a vehicle). Mapping one to its
|
|
79941
|
+
* parent's macro would spawn a second, overlapping track for the same
|
|
79942
|
+
* subject. `face` and `license_plate` are instead declared as CROP supplies
|
|
79943
|
+
* (D730): the box becomes a detail child of the person / vehicle containing
|
|
79944
|
+
* it, when the face / plate step uses the root model.
|
|
79945
|
+
* - `no-macro`: an object with no detection macro to live under.
|
|
79946
|
+
*/
|
|
79947
|
+
var PLUS_CATALOG_UNMAPPED_LABELS = {
|
|
79948
|
+
face: "attribute",
|
|
79949
|
+
license_plate: "attribute",
|
|
79950
|
+
amazon: "attribute",
|
|
79951
|
+
usps: "attribute",
|
|
79952
|
+
ups: "attribute",
|
|
79953
|
+
fedex: "attribute",
|
|
79954
|
+
dhl: "attribute",
|
|
79955
|
+
an_post: "attribute",
|
|
79956
|
+
purolator: "attribute",
|
|
79957
|
+
postnl: "attribute",
|
|
79958
|
+
nzpost: "attribute",
|
|
79959
|
+
postnord: "attribute",
|
|
79960
|
+
gls: "attribute",
|
|
79961
|
+
dpd: "attribute",
|
|
79962
|
+
canada_post: "attribute",
|
|
79963
|
+
royal_mail: "attribute",
|
|
79964
|
+
waste_bin: "no-macro",
|
|
79965
|
+
bbq_grill: "no-macro",
|
|
79966
|
+
robot_lawnmower: "no-macro",
|
|
79967
|
+
umbrella: "no-macro",
|
|
79968
|
+
baby_stroller: "no-macro"
|
|
79969
|
+
};
|
|
79970
|
+
/**
|
|
79971
|
+
* The per-model classMap for a plus catalog / plus catalog detector, derived from ITS
|
|
79972
|
+
* labelmap: each label resolves through {@link PLUS_CATALOG_TO_MACRO} first,
|
|
79973
|
+
* then `COCO_TO_MACRO` (plus catalog's default model ships the COCO-91 labelmap, so
|
|
79974
|
+
* a preset import may carry either vocabulary). A label neither knows is left
|
|
79975
|
+
* out, and `preserveOriginal: false` drops it in the executor — the same
|
|
79976
|
+
* contract as the COCO map, now with the plus catalog vocabulary in it.
|
|
79977
|
+
*/
|
|
79978
|
+
function buildPlusCatalogClassMap(labels) {
|
|
79979
|
+
const mapping = {};
|
|
79980
|
+
for (const label of labels) {
|
|
79981
|
+
const target = PLUS_CATALOG_TO_MACRO[label] ?? COCO_TO_MACRO.mapping[label];
|
|
79982
|
+
if (target !== void 0 && isClassMapMacroTarget(target)) mapping[label] = target;
|
|
79983
|
+
}
|
|
79984
|
+
return {
|
|
79985
|
+
mapping,
|
|
79986
|
+
preserveOriginal: false
|
|
79987
|
+
};
|
|
79988
|
+
}
|
|
79989
|
+
/**
|
|
79990
|
+
* Everything a plus catalog / plus catalog entry derives from ITS OWN labelmap: the
|
|
79991
|
+
* classMap and the steps it can supply (D730) — label and crop kinds alike.
|
|
79992
|
+
* Every plus catalog builder spreads this at import, so the two cannot be derived
|
|
79993
|
+
* from different label lists, and no family is assumed to carry a label it
|
|
79994
|
+
* does not list.
|
|
79995
|
+
*/
|
|
79996
|
+
function plusCatalogLabelFields(labels) {
|
|
79997
|
+
const classMap = buildPlusCatalogClassMap(labels);
|
|
79998
|
+
const supplies = deriveRootSupplies(labels, classMap);
|
|
79999
|
+
return supplies.length > 0 ? {
|
|
80000
|
+
classMap,
|
|
80001
|
+
suppliesSteps: supplies
|
|
80002
|
+
} : { classMap };
|
|
80003
|
+
}
|
|
80004
|
+
/**
|
|
80005
|
+
* Per-class confidence-floor defaults of an imported stock plus catalog detector
|
|
80006
|
+
* (D738): its per-detection `min_score` default, 0.5, for every class. Its
|
|
80007
|
+
* track-level `threshold` (the median of a track's recent scores) has no
|
|
80008
|
+
* counterpart in CamStack's per-detection floors and is not carried.
|
|
80009
|
+
*/
|
|
80010
|
+
var PLUS_CATALOG_STOCK_CLASS_FLOORS = Object.freeze({
|
|
80011
|
+
person: .5,
|
|
80012
|
+
vehicle: .5,
|
|
80013
|
+
animal: .5
|
|
80014
|
+
});
|
|
80015
|
+
/**
|
|
80016
|
+
* Per-class floor defaults of an imported plus catalog detector (D738): the
|
|
80017
|
+
* documented starting `min_score` values for plus catalog models, which score
|
|
80018
|
+
* higher than the stock ones (person 0.65, car 0.65, cat 0.65, dog 0.70). The
|
|
80019
|
+
* macro `animal` takes the lower of its classes, so no class is cut above its
|
|
80020
|
+
* documented value.
|
|
80021
|
+
*/
|
|
80022
|
+
var PLUS_CATALOG_CLASS_FLOORS = Object.freeze({
|
|
80023
|
+
person: .65,
|
|
80024
|
+
vehicle: .65,
|
|
80025
|
+
animal: .65
|
|
80026
|
+
});
|
|
80027
|
+
/**
|
|
80028
|
+
* The `defaultClassFloors` an imported plus catalog entry carries: the import's
|
|
80029
|
+
* own, when it states them, else the defaults of its kind. A fresh object.
|
|
80030
|
+
*/
|
|
80031
|
+
function plusCatalogDefaultClassFloors(kind, carried) {
|
|
80032
|
+
if (carried !== void 0) return { ...carried };
|
|
80033
|
+
return { ...kind === "plus" ? PLUS_CATALOG_CLASS_FLOORS : PLUS_CATALOG_STOCK_CLASS_FLOORS };
|
|
80034
|
+
}
|
|
80035
|
+
//#endregion
|
|
80036
|
+
//#region src/catalogs/device-state-vocabulary.ts
|
|
80037
|
+
/**
|
|
80038
|
+
* Most specific first. Extending this list is how a new device kind becomes
|
|
80039
|
+
* gateable; nothing else needs to change.
|
|
80040
|
+
*/
|
|
80041
|
+
var DEVICE_STATE_READERS = [
|
|
80202
80042
|
{
|
|
80203
|
-
|
|
80204
|
-
|
|
80043
|
+
cap: "alarm-panel",
|
|
80044
|
+
field: "state"
|
|
80205
80045
|
},
|
|
80206
80046
|
{
|
|
80207
|
-
|
|
80208
|
-
|
|
80047
|
+
cap: "cover",
|
|
80048
|
+
field: "state"
|
|
80209
80049
|
},
|
|
80210
80050
|
{
|
|
80211
|
-
|
|
80212
|
-
|
|
80051
|
+
cap: "presence",
|
|
80052
|
+
field: "state"
|
|
80213
80053
|
},
|
|
80214
80054
|
{
|
|
80215
|
-
|
|
80216
|
-
|
|
80055
|
+
cap: "lock-control",
|
|
80056
|
+
field: "state"
|
|
80217
80057
|
},
|
|
80218
80058
|
{
|
|
80219
|
-
|
|
80220
|
-
|
|
80059
|
+
cap: "contact",
|
|
80060
|
+
field: "entryOpen",
|
|
80061
|
+
booleanWords: ["open", "closed"]
|
|
80221
80062
|
},
|
|
80222
80063
|
{
|
|
80223
|
-
|
|
80224
|
-
|
|
80225
|
-
|
|
80226
|
-
{
|
|
80227
|
-
key: "databaseSnapshot",
|
|
80228
|
-
name: "database-snapshot"
|
|
80229
|
-
},
|
|
80230
|
-
{
|
|
80231
|
-
key: "dayNight",
|
|
80232
|
-
name: "day-night"
|
|
80233
|
-
},
|
|
80234
|
-
{
|
|
80235
|
-
key: "decoder",
|
|
80236
|
-
name: "decoder"
|
|
80237
|
-
},
|
|
80238
|
-
{
|
|
80239
|
-
key: "detectionPipeline",
|
|
80240
|
-
name: "detection-pipeline"
|
|
80241
|
-
},
|
|
80242
|
-
{
|
|
80243
|
-
key: "deviceAdminLink",
|
|
80244
|
-
name: "device-admin-link"
|
|
80245
|
-
},
|
|
80246
|
-
{
|
|
80247
|
-
key: "deviceAdoption",
|
|
80248
|
-
name: "device-adoption"
|
|
80249
|
-
},
|
|
80250
|
-
{
|
|
80251
|
-
key: "deviceCredentials",
|
|
80252
|
-
name: "device-credentials"
|
|
80253
|
-
},
|
|
80254
|
-
{
|
|
80255
|
-
key: "deviceDiscovery",
|
|
80256
|
-
name: "device-discovery"
|
|
80257
|
-
},
|
|
80258
|
-
{
|
|
80259
|
-
key: "deviceExport",
|
|
80260
|
-
name: "device-export"
|
|
80261
|
-
},
|
|
80262
|
-
{
|
|
80263
|
-
key: "deviceExtension",
|
|
80264
|
-
name: "device-extension"
|
|
80265
|
-
},
|
|
80266
|
-
{
|
|
80267
|
-
key: "deviceHistory",
|
|
80268
|
-
name: "device-history"
|
|
80269
|
-
},
|
|
80270
|
-
{
|
|
80271
|
-
key: "deviceManager",
|
|
80272
|
-
name: "device-manager"
|
|
80273
|
-
},
|
|
80274
|
-
{
|
|
80275
|
-
key: "deviceOps",
|
|
80276
|
-
name: "device-ops"
|
|
80277
|
-
},
|
|
80278
|
-
{
|
|
80279
|
-
key: "deviceProvider",
|
|
80280
|
-
name: "device-provider"
|
|
80281
|
-
},
|
|
80282
|
-
{
|
|
80283
|
-
key: "deviceRemovalHook",
|
|
80284
|
-
name: "device-removal-hook"
|
|
80285
|
-
},
|
|
80286
|
-
{
|
|
80287
|
-
key: "deviceState",
|
|
80288
|
-
name: "device-state"
|
|
80289
|
-
},
|
|
80290
|
-
{
|
|
80291
|
-
key: "deviceStatus",
|
|
80292
|
-
name: "device-status"
|
|
80293
|
-
},
|
|
80294
|
-
{
|
|
80295
|
-
key: "dishwasher",
|
|
80296
|
-
name: "dishwasher"
|
|
80297
|
-
},
|
|
80298
|
-
{
|
|
80299
|
-
key: "displayPalette",
|
|
80300
|
-
name: "display-palette"
|
|
80301
|
-
},
|
|
80302
|
-
{
|
|
80303
|
-
key: "doorbell",
|
|
80304
|
-
name: "doorbell"
|
|
80305
|
-
},
|
|
80306
|
-
{
|
|
80307
|
-
key: "embeddingEncoder",
|
|
80308
|
-
name: "embedding-encoder"
|
|
80309
|
-
},
|
|
80310
|
-
{
|
|
80311
|
-
key: "enumSensor",
|
|
80312
|
-
name: "enum-sensor"
|
|
80313
|
-
},
|
|
80314
|
-
{
|
|
80315
|
-
key: "eventEmitter",
|
|
80316
|
-
name: "event-emitter"
|
|
80317
|
-
},
|
|
80318
|
-
{
|
|
80319
|
-
key: "faceGallery",
|
|
80320
|
-
name: "face-gallery"
|
|
80321
|
-
},
|
|
80322
|
-
{
|
|
80323
|
-
key: "failureContribution",
|
|
80324
|
-
name: "failure-contribution"
|
|
80325
|
-
},
|
|
80326
|
-
{
|
|
80327
|
-
key: "fanControl",
|
|
80328
|
-
name: "fan-control"
|
|
80329
|
-
},
|
|
80330
|
-
{
|
|
80331
|
-
key: "featureProbe",
|
|
80332
|
-
name: "feature-probe"
|
|
80333
|
-
},
|
|
80334
|
-
{
|
|
80335
|
-
key: "filesystemBrowse",
|
|
80336
|
-
name: "filesystem-browse"
|
|
80337
|
-
},
|
|
80338
|
-
{
|
|
80339
|
-
key: "flood",
|
|
80340
|
-
name: "flood"
|
|
80341
|
-
},
|
|
80342
|
-
{
|
|
80343
|
-
key: "gas",
|
|
80344
|
-
name: "gas"
|
|
80345
|
-
},
|
|
80346
|
-
{
|
|
80347
|
-
key: "heatingValve",
|
|
80348
|
-
name: "heating-valve"
|
|
80349
|
-
},
|
|
80350
|
-
{
|
|
80351
|
-
key: "humidifier",
|
|
80352
|
-
name: "humidifier"
|
|
80353
|
-
},
|
|
80354
|
-
{
|
|
80355
|
-
key: "humiditySensor",
|
|
80356
|
-
name: "humidity-sensor"
|
|
80357
|
-
},
|
|
80358
|
-
{
|
|
80359
|
-
key: "image",
|
|
80360
|
-
name: "image"
|
|
80361
|
-
},
|
|
80362
|
-
{
|
|
80363
|
-
key: "imageSettings",
|
|
80364
|
-
name: "image-settings"
|
|
80365
|
-
},
|
|
80366
|
-
{
|
|
80367
|
-
key: "integrations",
|
|
80368
|
-
name: "integrations"
|
|
80369
|
-
},
|
|
80370
|
-
{
|
|
80371
|
-
key: "intercom",
|
|
80372
|
-
name: "intercom"
|
|
80373
|
-
},
|
|
80374
|
-
{
|
|
80375
|
-
key: "keychain",
|
|
80376
|
-
name: "keychain"
|
|
80377
|
-
},
|
|
80378
|
-
{
|
|
80379
|
-
key: "keychainAdmin",
|
|
80380
|
-
name: "keychain-admin"
|
|
80381
|
-
},
|
|
80382
|
-
{
|
|
80383
|
-
key: "lawnMowerControl",
|
|
80384
|
-
name: "lawn-mower-control"
|
|
80385
|
-
},
|
|
80386
|
-
{
|
|
80387
|
-
key: "llm",
|
|
80388
|
-
name: "llm"
|
|
80389
|
-
},
|
|
80390
|
-
{
|
|
80391
|
-
key: "llmRuntime",
|
|
80392
|
-
name: "llm-runtime"
|
|
80393
|
-
},
|
|
80394
|
-
{
|
|
80395
|
-
key: "loadContribution",
|
|
80396
|
-
name: "load-contribution"
|
|
80397
|
-
},
|
|
80398
|
-
{
|
|
80399
|
-
key: "localNetwork",
|
|
80400
|
-
name: "local-network"
|
|
80401
|
-
},
|
|
80402
|
-
{
|
|
80403
|
-
key: "lockControl",
|
|
80404
|
-
name: "lock-control"
|
|
80405
|
-
},
|
|
80406
|
-
{
|
|
80407
|
-
key: "logChannels",
|
|
80408
|
-
name: "log-channels"
|
|
80409
|
-
},
|
|
80410
|
-
{
|
|
80411
|
-
key: "logDestination",
|
|
80412
|
-
name: "log-destination"
|
|
80413
|
-
},
|
|
80414
|
-
{
|
|
80415
|
-
key: "loginMethod",
|
|
80416
|
-
name: "login-method"
|
|
80417
|
-
},
|
|
80418
|
-
{
|
|
80419
|
-
key: "mediaPlayer",
|
|
80420
|
-
name: "media-player"
|
|
80421
|
-
},
|
|
80422
|
-
{
|
|
80423
|
-
key: "meshNetwork",
|
|
80424
|
-
name: "mesh-network"
|
|
80425
|
-
},
|
|
80426
|
-
{
|
|
80427
|
-
key: "metricsProvider",
|
|
80428
|
-
name: "metrics-provider"
|
|
80429
|
-
},
|
|
80430
|
-
{
|
|
80431
|
-
key: "modelConvert",
|
|
80432
|
-
name: "model-convert"
|
|
80433
|
-
},
|
|
80434
|
-
{
|
|
80435
|
-
key: "modelDistributor",
|
|
80436
|
-
name: "model-distributor"
|
|
80437
|
-
},
|
|
80438
|
-
{
|
|
80439
|
-
key: "motion",
|
|
80440
|
-
name: "motion"
|
|
80441
|
-
},
|
|
80442
|
-
{
|
|
80443
|
-
key: "motionDetection",
|
|
80444
|
-
name: "motion-detection"
|
|
80445
|
-
},
|
|
80446
|
-
{
|
|
80447
|
-
key: "motionTrigger",
|
|
80448
|
-
name: "motion-trigger"
|
|
80449
|
-
},
|
|
80450
|
-
{
|
|
80451
|
-
key: "motionZones",
|
|
80452
|
-
name: "motion-zones"
|
|
80453
|
-
},
|
|
80454
|
-
{
|
|
80455
|
-
key: "mqttBroker",
|
|
80456
|
-
name: "mqtt-broker"
|
|
80457
|
-
},
|
|
80458
|
-
{
|
|
80459
|
-
key: "nativeObjectDetection",
|
|
80460
|
-
name: "native-object-detection"
|
|
80461
|
-
},
|
|
80462
|
-
{
|
|
80463
|
-
key: "navigation",
|
|
80464
|
-
name: "navigation"
|
|
80465
|
-
},
|
|
80466
|
-
{
|
|
80467
|
-
key: "networkAccess",
|
|
80468
|
-
name: "network-access"
|
|
80469
|
-
},
|
|
80470
|
-
{
|
|
80471
|
-
key: "networkLink",
|
|
80472
|
-
name: "network-link"
|
|
80473
|
-
},
|
|
80474
|
-
{
|
|
80475
|
-
key: "networkQuality",
|
|
80476
|
-
name: "network-quality"
|
|
80477
|
-
},
|
|
80478
|
-
{
|
|
80479
|
-
key: "nodeCertificates",
|
|
80480
|
-
name: "node-certificates"
|
|
80481
|
-
},
|
|
80482
|
-
{
|
|
80483
|
-
key: "nodes",
|
|
80484
|
-
name: "nodes"
|
|
80485
|
-
},
|
|
80486
|
-
{
|
|
80487
|
-
key: "notificationOutput",
|
|
80488
|
-
name: "notification-output"
|
|
80489
|
-
},
|
|
80490
|
-
{
|
|
80491
|
-
key: "notificationRules",
|
|
80492
|
-
name: "notification-rules"
|
|
80493
|
-
},
|
|
80494
|
-
{
|
|
80495
|
-
key: "notifier",
|
|
80496
|
-
name: "notifier"
|
|
80497
|
-
},
|
|
80498
|
-
{
|
|
80499
|
-
key: "numericSensor",
|
|
80500
|
-
name: "numeric-sensor"
|
|
80501
|
-
},
|
|
80502
|
-
{
|
|
80503
|
-
key: "oauthIntegration",
|
|
80504
|
-
name: "oauth-integration"
|
|
80505
|
-
},
|
|
80506
|
-
{
|
|
80507
|
-
key: "oidcConnections",
|
|
80508
|
-
name: "oidc-connections"
|
|
80509
|
-
},
|
|
80510
|
-
{
|
|
80511
|
-
key: "osd",
|
|
80512
|
-
name: "osd"
|
|
80513
|
-
},
|
|
80514
|
-
{
|
|
80515
|
-
key: "osdManager",
|
|
80516
|
-
name: "osd-manager"
|
|
80517
|
-
},
|
|
80518
|
-
{
|
|
80519
|
-
key: "petFeeder",
|
|
80520
|
-
name: "pet-feeder"
|
|
80521
|
-
},
|
|
80522
|
-
{
|
|
80523
|
-
key: "pipelineAnalytics",
|
|
80524
|
-
name: "pipeline-analytics"
|
|
80525
|
-
},
|
|
80526
|
-
{
|
|
80527
|
-
key: "pipelineExecutor",
|
|
80528
|
-
name: "pipeline-executor"
|
|
80529
|
-
},
|
|
80530
|
-
{
|
|
80531
|
-
key: "pipelineOrchestrator",
|
|
80532
|
-
name: "pipeline-orchestrator"
|
|
80533
|
-
},
|
|
80534
|
-
{
|
|
80535
|
-
key: "pipelineRunner",
|
|
80536
|
-
name: "pipeline-runner"
|
|
80537
|
-
},
|
|
80538
|
-
{
|
|
80539
|
-
key: "plateGallery",
|
|
80540
|
-
name: "plate-gallery"
|
|
80541
|
-
},
|
|
80542
|
-
{
|
|
80543
|
-
key: "platformProbe",
|
|
80544
|
-
name: "platform-probe"
|
|
80545
|
-
},
|
|
80546
|
-
{
|
|
80547
|
-
key: "powerMeter",
|
|
80548
|
-
name: "power-meter"
|
|
80549
|
-
},
|
|
80550
|
-
{
|
|
80551
|
-
key: "presence",
|
|
80552
|
-
name: "presence"
|
|
80553
|
-
},
|
|
80554
|
-
{
|
|
80555
|
-
key: "pressureSensor",
|
|
80556
|
-
name: "pressure-sensor"
|
|
80557
|
-
},
|
|
80558
|
-
{
|
|
80559
|
-
key: "privacyMask",
|
|
80560
|
-
name: "privacy-mask"
|
|
80561
|
-
},
|
|
80562
|
-
{
|
|
80563
|
-
key: "ptz",
|
|
80564
|
-
name: "ptz"
|
|
80565
|
-
},
|
|
80566
|
-
{
|
|
80567
|
-
key: "ptzAutotrack",
|
|
80568
|
-
name: "ptz-autotrack"
|
|
80569
|
-
},
|
|
80570
|
-
{
|
|
80571
|
-
key: "reboot",
|
|
80572
|
-
name: "reboot"
|
|
80573
|
-
},
|
|
80574
|
-
{
|
|
80575
|
-
key: "recordEntries",
|
|
80576
|
-
name: "record-entries"
|
|
80577
|
-
},
|
|
80578
|
-
{
|
|
80579
|
-
key: "recording",
|
|
80580
|
-
name: "recording"
|
|
80581
|
-
},
|
|
80582
|
-
{
|
|
80583
|
-
key: "recordingArchive",
|
|
80584
|
-
name: "recording-archive"
|
|
80585
|
-
},
|
|
80586
|
-
{
|
|
80587
|
-
key: "recordingExport",
|
|
80588
|
-
name: "recording-export"
|
|
80589
|
-
},
|
|
80590
|
-
{
|
|
80591
|
-
key: "recordingOnboard",
|
|
80592
|
-
name: "recording-onboard"
|
|
80593
|
-
},
|
|
80594
|
-
{
|
|
80595
|
-
key: "recordingSignal",
|
|
80596
|
-
name: "recording-signal"
|
|
80597
|
-
},
|
|
80598
|
-
{
|
|
80599
|
-
key: "records",
|
|
80600
|
-
name: "records"
|
|
80601
|
-
},
|
|
80602
|
-
{
|
|
80603
|
-
key: "runningState",
|
|
80604
|
-
name: "running-state"
|
|
80605
|
-
},
|
|
80606
|
-
{
|
|
80607
|
-
key: "sceneMonitor",
|
|
80608
|
-
name: "scene-monitor"
|
|
80609
|
-
},
|
|
80610
|
-
{
|
|
80611
|
-
key: "scriptRunner",
|
|
80612
|
-
name: "script-runner"
|
|
80613
|
-
},
|
|
80614
|
-
{
|
|
80615
|
-
key: "serverManagement",
|
|
80616
|
-
name: "server-management"
|
|
80617
|
-
},
|
|
80618
|
-
{
|
|
80619
|
-
key: "settingsStore",
|
|
80620
|
-
name: "settings-store"
|
|
80621
|
-
},
|
|
80622
|
-
{
|
|
80623
|
-
key: "smoke",
|
|
80624
|
-
name: "smoke"
|
|
80625
|
-
},
|
|
80626
|
-
{
|
|
80627
|
-
key: "smtpProvider",
|
|
80628
|
-
name: "smtp-provider"
|
|
80629
|
-
},
|
|
80630
|
-
{
|
|
80631
|
-
key: "snapshot",
|
|
80632
|
-
name: "snapshot"
|
|
80633
|
-
},
|
|
80634
|
-
{
|
|
80635
|
-
key: "ssoBridge",
|
|
80636
|
-
name: "sso-bridge"
|
|
80637
|
-
},
|
|
80638
|
-
{
|
|
80639
|
-
key: "storage",
|
|
80640
|
-
name: "storage"
|
|
80641
|
-
},
|
|
80642
|
-
{
|
|
80643
|
-
key: "storageAdmin",
|
|
80644
|
-
name: "storage-admin"
|
|
80645
|
-
},
|
|
80646
|
-
{
|
|
80647
|
-
key: "storageEvictable",
|
|
80648
|
-
name: "storage-evictable"
|
|
80649
|
-
},
|
|
80650
|
-
{
|
|
80651
|
-
key: "storageMigration",
|
|
80652
|
-
name: "storage-migration"
|
|
80653
|
-
},
|
|
80654
|
-
{
|
|
80655
|
-
key: "storageOccupancy",
|
|
80656
|
-
name: "storage-occupancy"
|
|
80657
|
-
},
|
|
80658
|
-
{
|
|
80659
|
-
key: "storageProvider",
|
|
80660
|
-
name: "storage-provider"
|
|
80661
|
-
},
|
|
80662
|
-
{
|
|
80663
|
-
key: "streamBroker",
|
|
80664
|
-
name: "stream-broker"
|
|
80665
|
-
},
|
|
80666
|
-
{
|
|
80667
|
-
key: "streamCatalog",
|
|
80668
|
-
name: "stream-catalog"
|
|
80669
|
-
},
|
|
80670
|
-
{
|
|
80671
|
-
key: "streamParams",
|
|
80672
|
-
name: "stream-params"
|
|
80673
|
-
},
|
|
80674
|
-
{
|
|
80675
|
-
key: "streamSignals",
|
|
80676
|
-
name: "stream-signals"
|
|
80677
|
-
},
|
|
80678
|
-
{
|
|
80679
|
-
key: "switch",
|
|
80680
|
-
name: "switch"
|
|
80681
|
-
},
|
|
80682
|
-
{
|
|
80683
|
-
key: "system",
|
|
80684
|
-
name: "system"
|
|
80685
|
-
},
|
|
80686
|
-
{
|
|
80687
|
-
key: "tamper",
|
|
80688
|
-
name: "tamper"
|
|
80689
|
-
},
|
|
80690
|
-
{
|
|
80691
|
-
key: "temperatureSensor",
|
|
80692
|
-
name: "temperature-sensor"
|
|
80693
|
-
},
|
|
80694
|
-
{
|
|
80695
|
-
key: "terminalSession",
|
|
80696
|
-
name: "terminal-session"
|
|
80697
|
-
},
|
|
80698
|
-
{
|
|
80699
|
-
key: "toast",
|
|
80700
|
-
name: "toast"
|
|
80701
|
-
},
|
|
80702
|
-
{
|
|
80703
|
-
key: "training",
|
|
80704
|
-
name: "training"
|
|
80705
|
-
},
|
|
80706
|
-
{
|
|
80707
|
-
key: "trainingProvider",
|
|
80708
|
-
name: "training-provider"
|
|
80709
|
-
},
|
|
80710
|
-
{
|
|
80711
|
-
key: "turnProvider",
|
|
80712
|
-
name: "turn-provider"
|
|
80713
|
-
},
|
|
80714
|
-
{
|
|
80715
|
-
key: "update",
|
|
80716
|
-
name: "update"
|
|
80717
|
-
},
|
|
80718
|
-
{
|
|
80719
|
-
key: "userManagement",
|
|
80720
|
-
name: "user-management"
|
|
80721
|
-
},
|
|
80722
|
-
{
|
|
80723
|
-
key: "userPasskeys",
|
|
80724
|
-
name: "user-passkeys"
|
|
80725
|
-
},
|
|
80726
|
-
{
|
|
80727
|
-
key: "vacuumControl",
|
|
80728
|
-
name: "vacuum-control"
|
|
80729
|
-
},
|
|
80730
|
-
{
|
|
80731
|
-
key: "valve",
|
|
80732
|
-
name: "valve"
|
|
80733
|
-
},
|
|
80734
|
-
{
|
|
80735
|
-
key: "vectorStore",
|
|
80736
|
-
name: "vector-store"
|
|
80737
|
-
},
|
|
80738
|
-
{
|
|
80739
|
-
key: "vibration",
|
|
80740
|
-
name: "vibration"
|
|
80741
|
-
},
|
|
80742
|
-
{
|
|
80743
|
-
key: "videoclips",
|
|
80744
|
-
name: "videoclips"
|
|
80745
|
-
},
|
|
80746
|
-
{
|
|
80747
|
-
key: "viewerUi",
|
|
80748
|
-
name: "viewer-ui"
|
|
80749
|
-
},
|
|
80750
|
-
{
|
|
80751
|
-
key: "waterHeater",
|
|
80752
|
-
name: "water-heater"
|
|
80753
|
-
},
|
|
80754
|
-
{
|
|
80755
|
-
key: "weather",
|
|
80756
|
-
name: "weather"
|
|
80757
|
-
},
|
|
80758
|
-
{
|
|
80759
|
-
key: "webrtcSession",
|
|
80760
|
-
name: "webrtc-session"
|
|
80761
|
-
},
|
|
80762
|
-
{
|
|
80763
|
-
key: "zoneAnalytics",
|
|
80764
|
-
name: "zone-analytics"
|
|
80765
|
-
},
|
|
80766
|
-
{
|
|
80767
|
-
key: "zoneRules",
|
|
80768
|
-
name: "zone-rules"
|
|
80769
|
-
},
|
|
80770
|
-
{
|
|
80771
|
-
key: "zones",
|
|
80772
|
-
name: "zones"
|
|
80773
|
-
}
|
|
80774
|
-
];
|
|
80775
|
-
/**
|
|
80776
|
-
* Every CapabilityDefinition shipped by `@camstack/types`. The hub
|
|
80777
|
-
* iterates this array at boot to declare each cap on the registry
|
|
80778
|
-
* before addons (in-process or via the Moleculer bridge) attempt
|
|
80779
|
-
* `registerProvider`. Adding a new cap means dropping a `*.cap.ts`
|
|
80780
|
-
* file in `packages/types/src/capabilities/` and re-running
|
|
80781
|
-
* `npx tsx scripts/generate-capability-router-types.ts` — no manual
|
|
80782
|
-
* edit to `main.ts` required.
|
|
80783
|
-
*/
|
|
80784
|
-
var ALL_CAPABILITY_DEFINITIONS = [
|
|
80785
|
-
accessoriesCapability,
|
|
80786
|
-
addonPagesCapability,
|
|
80787
|
-
addonPagesSourceCapability,
|
|
80788
|
-
addonRoutesCapability,
|
|
80789
|
-
addonSettingsCapability,
|
|
80790
|
-
addonWidgetsCapability,
|
|
80791
|
-
addonWidgetsSourceCapability,
|
|
80792
|
-
addonsCapability,
|
|
80793
|
-
require_sleep.adminUiCapability,
|
|
80794
|
-
airQualitySensorCapability,
|
|
80795
|
-
alarmPanelCapability,
|
|
80796
|
-
alertsCapability,
|
|
80797
|
-
ambientLightSensorCapability,
|
|
80798
|
-
audioAnalysisCapability,
|
|
80799
|
-
audioAnalyzerCapability,
|
|
80800
|
-
audioCodecCapability,
|
|
80801
|
-
audioMetricsCapability,
|
|
80802
|
-
authProviderCapability,
|
|
80803
|
-
automationControlCapability,
|
|
80804
|
-
backupCapability,
|
|
80805
|
-
batteryCapability,
|
|
80806
|
-
binaryCapability,
|
|
80807
|
-
brightnessCapability,
|
|
80808
|
-
brokerCapability,
|
|
80809
|
-
buttonCapability,
|
|
80810
|
-
calendarSourceCapability,
|
|
80811
|
-
calendarsCapability,
|
|
80812
|
-
cameraCredentialsCapability,
|
|
80813
|
-
cameraGridLayoutCapability,
|
|
80814
|
-
cameraPipelineConfigCapability,
|
|
80815
|
-
cameraStreamsCapability,
|
|
80816
|
-
carbonMonoxideCapability,
|
|
80817
|
-
climateControlCapability,
|
|
80818
|
-
colorCapability,
|
|
80819
|
-
composerCapability,
|
|
80820
|
-
connectionTestCapability,
|
|
80821
|
-
connectivityCapability,
|
|
80822
|
-
consumablesCapability,
|
|
80823
|
-
contactCapability,
|
|
80824
|
-
controlCapability,
|
|
80825
|
-
coreBlocksCapability,
|
|
80826
|
-
coverCapability,
|
|
80827
|
-
customModelRegistryCapability,
|
|
80828
|
-
dataStoreProviderCapability,
|
|
80829
|
-
databaseSnapshotCapability,
|
|
80830
|
-
dayNightCapability,
|
|
80831
|
-
decoderCapability,
|
|
80832
|
-
detectionPipelineCapability,
|
|
80833
|
-
deviceAdminLinkCapability,
|
|
80834
|
-
deviceAdoptionCapability,
|
|
80835
|
-
deviceCredentialsCapability,
|
|
80836
|
-
deviceDiscoveryCapability,
|
|
80837
|
-
deviceExportCapability,
|
|
80838
|
-
deviceExtensionCapability,
|
|
80839
|
-
deviceHistoryCapability,
|
|
80840
|
-
deviceManagerCapability,
|
|
80841
|
-
require_sleep.deviceOpsCapability,
|
|
80842
|
-
deviceProviderCapability,
|
|
80843
|
-
deviceRemovalHookCapability,
|
|
80844
|
-
deviceStateCapability,
|
|
80845
|
-
deviceStatusCapability,
|
|
80846
|
-
dishwasherCapability,
|
|
80847
|
-
displayPaletteCapability,
|
|
80848
|
-
doorbellCapability,
|
|
80849
|
-
embeddingEncoderCapability,
|
|
80850
|
-
enumSensorCapability,
|
|
80851
|
-
eventEmitterCapability,
|
|
80852
|
-
faceGalleryCapability,
|
|
80853
|
-
failureContributionCapability,
|
|
80854
|
-
fanControlCapability,
|
|
80855
|
-
featureProbeCapability,
|
|
80856
|
-
filesystemBrowseCapability,
|
|
80857
|
-
floodCapability,
|
|
80858
|
-
gasCapability,
|
|
80859
|
-
heatingValveCapability,
|
|
80860
|
-
humidifierCapability,
|
|
80861
|
-
humiditySensorCapability,
|
|
80862
|
-
imageCapability,
|
|
80863
|
-
imageSettingsCapability,
|
|
80864
|
-
integrationsCapability,
|
|
80865
|
-
intercomCapability,
|
|
80866
|
-
keychainCapability,
|
|
80867
|
-
keychainAdminCapability,
|
|
80868
|
-
lawnMowerControlCapability,
|
|
80869
|
-
llmCapability,
|
|
80870
|
-
llmRuntimeCapability,
|
|
80871
|
-
loadContributionCapability,
|
|
80872
|
-
localNetworkCapability,
|
|
80873
|
-
lockControlCapability,
|
|
80874
|
-
logChannelsCapability,
|
|
80875
|
-
logDestinationCapability,
|
|
80876
|
-
loginMethodCapability,
|
|
80877
|
-
mediaPlayerCapability,
|
|
80878
|
-
meshNetworkCapability,
|
|
80879
|
-
metricsProviderCapability,
|
|
80880
|
-
modelConvertCapability,
|
|
80881
|
-
modelDistributorCapability,
|
|
80882
|
-
motionCapability,
|
|
80883
|
-
motionDetectionCapability,
|
|
80884
|
-
motionTriggerCapability,
|
|
80885
|
-
motionZonesCapability,
|
|
80886
|
-
mqttBrokerCapability,
|
|
80887
|
-
nativeObjectDetectionCapability,
|
|
80888
|
-
navigationCapability,
|
|
80889
|
-
networkAccessCapability,
|
|
80890
|
-
networkLinkCapability,
|
|
80891
|
-
networkQualityCapability,
|
|
80892
|
-
nodeCertificatesCapability,
|
|
80893
|
-
nodesCapability,
|
|
80894
|
-
notificationOutputCapability,
|
|
80895
|
-
notificationRulesCapability,
|
|
80896
|
-
notifierCapability,
|
|
80897
|
-
numericSensorCapability,
|
|
80898
|
-
oauthIntegrationCapability,
|
|
80899
|
-
oidcConnectionsCapability,
|
|
80900
|
-
osdCapability,
|
|
80901
|
-
osdManagerCapability,
|
|
80902
|
-
petFeederCapability,
|
|
80903
|
-
pipelineAnalyticsCapability,
|
|
80904
|
-
pipelineExecutorCapability,
|
|
80905
|
-
pipelineOrchestratorCapability,
|
|
80906
|
-
pipelineRunnerCapability,
|
|
80907
|
-
plateGalleryCapability,
|
|
80908
|
-
platformProbeCapability,
|
|
80909
|
-
powerMeterCapability,
|
|
80910
|
-
presenceCapability,
|
|
80911
|
-
pressureSensorCapability,
|
|
80912
|
-
privacyMaskCapability,
|
|
80913
|
-
ptzCapability,
|
|
80914
|
-
ptzAutotrackCapability,
|
|
80915
|
-
rebootCapability,
|
|
80916
|
-
recordEntriesCapability,
|
|
80917
|
-
recordingCapability,
|
|
80918
|
-
recordingArchiveCapability,
|
|
80919
|
-
recordingExportCapability,
|
|
80920
|
-
recordingOnboardCapability,
|
|
80921
|
-
recordingSignalCapability,
|
|
80922
|
-
recordsCapability,
|
|
80923
|
-
runningStateCapability,
|
|
80924
|
-
sceneMonitorCapability,
|
|
80925
|
-
scriptRunnerCapability,
|
|
80926
|
-
serverManagementCapability,
|
|
80927
|
-
settingsStoreCapability,
|
|
80928
|
-
smokeCapability,
|
|
80929
|
-
smtpProviderCapability,
|
|
80930
|
-
snapshotCapability,
|
|
80931
|
-
ssoBridgeCapability,
|
|
80932
|
-
storageCapability,
|
|
80933
|
-
storageAdminCapability,
|
|
80934
|
-
storageEvictableCapability,
|
|
80935
|
-
storageMigrationCapability,
|
|
80936
|
-
storageOccupancyCapability,
|
|
80937
|
-
storageProviderCapability,
|
|
80938
|
-
streamBrokerCapability,
|
|
80939
|
-
streamCatalogCapability,
|
|
80940
|
-
streamParamsCapability,
|
|
80941
|
-
streamSignalsCapability,
|
|
80942
|
-
switchCapability,
|
|
80943
|
-
systemCapability,
|
|
80944
|
-
tamperCapability,
|
|
80945
|
-
temperatureSensorCapability,
|
|
80946
|
-
terminalSessionCapability,
|
|
80947
|
-
toastCapability,
|
|
80948
|
-
trainingCapability,
|
|
80949
|
-
trainingProviderCapability,
|
|
80950
|
-
turnProviderCapability,
|
|
80951
|
-
updateCapability,
|
|
80952
|
-
userManagementCapability,
|
|
80953
|
-
userPasskeysCapability,
|
|
80954
|
-
vacuumControlCapability,
|
|
80955
|
-
valveCapability,
|
|
80956
|
-
vectorStoreCapability,
|
|
80957
|
-
vibrationCapability,
|
|
80958
|
-
videoclipsCapability,
|
|
80959
|
-
require_sleep.viewerUiCapability,
|
|
80960
|
-
waterHeaterCapability,
|
|
80961
|
-
weatherCapability,
|
|
80962
|
-
webrtcSessionCapability,
|
|
80963
|
-
zoneAnalyticsCapability,
|
|
80964
|
-
zoneRulesCapability,
|
|
80965
|
-
zonesCapability
|
|
80966
|
-
];
|
|
80967
|
-
//#endregion
|
|
80968
|
-
//#region src/composition/cards/role-cap.ts
|
|
80969
|
-
/**
|
|
80970
|
-
* Map a device role to the primary composition cap (D939).
|
|
80971
|
-
*/
|
|
80972
|
-
var ROLE_CAP_ALIASES = {
|
|
80973
|
-
[require_err_msg.DeviceRole.BinarySensor]: "binary",
|
|
80974
|
-
[require_err_msg.DeviceRole.MotionSensor]: "motion"
|
|
80975
|
-
};
|
|
80976
|
-
var KNOWN_CAPS = new Set(ALL_CAPABILITY_DEFINITIONS.map((def) => def.name));
|
|
80977
|
-
function primaryCapForRole(role) {
|
|
80978
|
-
if (role === null || role === "") return null;
|
|
80979
|
-
const aliased = ROLE_CAP_ALIASES[role];
|
|
80980
|
-
if (aliased !== void 0) return KNOWN_CAPS.has(aliased) ? aliased : null;
|
|
80981
|
-
return KNOWN_CAPS.has(role) ? role : null;
|
|
80982
|
-
}
|
|
80983
|
-
//#endregion
|
|
80984
|
-
//#region src/composition/cards/fill-status.ts
|
|
80985
|
-
function isUnfilledRequiredProblem(problem) {
|
|
80986
|
-
return problem.code === "missing-field";
|
|
80987
|
-
}
|
|
80988
|
-
function compositionFillStatus(problems) {
|
|
80989
|
-
return problems.some(isUnfilledRequiredProblem) ? "incomplete" : "complete";
|
|
80990
|
-
}
|
|
80991
|
-
/** True when the only problems are unfilled required fields — save may proceed. */
|
|
80992
|
-
function problemsBlockSave(problems) {
|
|
80993
|
-
return problems.some((p) => !isUnfilledRequiredProblem(p));
|
|
80994
|
-
}
|
|
80995
|
-
//#endregion
|
|
80996
|
-
//#region src/catalogs/frigate-plus-classmap.ts
|
|
80997
|
-
function isClassMapMacroTarget(value) {
|
|
80998
|
-
return CLASS_MAP_MACRO_TARGETS.some((target) => target === value);
|
|
80999
|
-
}
|
|
81000
|
-
/**
|
|
81001
|
-
* Raw Frigate+ label → detection macro. Every label of the documented
|
|
81002
|
-
* Frigate+ base set (docs.frigate.video/plus, verified 2026-08-21) is either
|
|
81003
|
-
* here or in {@link FRIGATE_PLUS_UNMAPPED_LABELS}, with the reason it is not.
|
|
81004
|
-
*
|
|
81005
|
-
* Why this exists: a Frigate+ import used to carry NO classMap, so it inherited
|
|
81006
|
-
* the step's `COCO_TO_MACRO` (`preserveOriginal: false`) and the executor
|
|
81007
|
-
* dropped every label COCO does not name — deer, raccoon, fox, squirrel, goat,
|
|
81008
|
-
* rabbit, skunk, kangaroo, possum, rodent, school_bus, garbage_truck and even
|
|
81009
|
-
* `package` vanished as `class-filter` discards. The executor keeps the raw
|
|
81010
|
-
* label as `originalClass` whenever the map resolves it, so the fine identity
|
|
81011
|
-
* survives under the macro.
|
|
81012
|
-
*/
|
|
81013
|
-
var FRIGATE_PLUS_TO_MACRO = {
|
|
81014
|
-
person: "person",
|
|
81015
|
-
baby: "person",
|
|
81016
|
-
car: "vehicle",
|
|
81017
|
-
motorcycle: "vehicle",
|
|
81018
|
-
bicycle: "vehicle",
|
|
81019
|
-
boat: "vehicle",
|
|
81020
|
-
school_bus: "vehicle",
|
|
81021
|
-
garbage_truck: "vehicle",
|
|
81022
|
-
dog: "animal",
|
|
81023
|
-
cat: "animal",
|
|
81024
|
-
deer: "animal",
|
|
81025
|
-
horse: "animal",
|
|
81026
|
-
bird: "animal",
|
|
81027
|
-
raccoon: "animal",
|
|
81028
|
-
fox: "animal",
|
|
81029
|
-
bear: "animal",
|
|
81030
|
-
cow: "animal",
|
|
81031
|
-
squirrel: "animal",
|
|
81032
|
-
goat: "animal",
|
|
81033
|
-
rabbit: "animal",
|
|
81034
|
-
skunk: "animal",
|
|
81035
|
-
kangaroo: "animal",
|
|
81036
|
-
possum: "animal",
|
|
81037
|
-
rodent: "animal",
|
|
81038
|
-
package: "package"
|
|
81039
|
-
};
|
|
81040
|
-
/**
|
|
81041
|
-
* Frigate+ labels deliberately left OUT of {@link FRIGATE_PLUS_TO_MACRO}.
|
|
81042
|
-
*
|
|
81043
|
-
* - `attribute`: Frigate+ emits these INSIDE a parent box (a face inside a
|
|
81044
|
-
* person, a plate or a carrier logo on a vehicle). Mapping one to its
|
|
81045
|
-
* parent's macro would spawn a second, overlapping track for the same
|
|
81046
|
-
* subject. `face` and `license_plate` are instead declared as CROP supplies
|
|
81047
|
-
* (D730): the box becomes a detail child of the person / vehicle containing
|
|
81048
|
-
* it, when the face / plate step uses the root model.
|
|
81049
|
-
* - `no-macro`: an object with no detection macro to live under.
|
|
81050
|
-
*/
|
|
81051
|
-
var FRIGATE_PLUS_UNMAPPED_LABELS = {
|
|
81052
|
-
face: "attribute",
|
|
81053
|
-
license_plate: "attribute",
|
|
81054
|
-
amazon: "attribute",
|
|
81055
|
-
usps: "attribute",
|
|
81056
|
-
ups: "attribute",
|
|
81057
|
-
fedex: "attribute",
|
|
81058
|
-
dhl: "attribute",
|
|
81059
|
-
an_post: "attribute",
|
|
81060
|
-
purolator: "attribute",
|
|
81061
|
-
postnl: "attribute",
|
|
81062
|
-
nzpost: "attribute",
|
|
81063
|
-
postnord: "attribute",
|
|
81064
|
-
gls: "attribute",
|
|
81065
|
-
dpd: "attribute",
|
|
81066
|
-
canada_post: "attribute",
|
|
81067
|
-
royal_mail: "attribute",
|
|
81068
|
-
waste_bin: "no-macro",
|
|
81069
|
-
bbq_grill: "no-macro",
|
|
81070
|
-
robot_lawnmower: "no-macro",
|
|
81071
|
-
umbrella: "no-macro",
|
|
81072
|
-
baby_stroller: "no-macro"
|
|
81073
|
-
};
|
|
81074
|
-
/**
|
|
81075
|
-
* The per-model classMap for a Frigate / Frigate+ detector, derived from ITS
|
|
81076
|
-
* labelmap: each label resolves through {@link FRIGATE_PLUS_TO_MACRO} first,
|
|
81077
|
-
* then `COCO_TO_MACRO` (Frigate's default model ships the COCO-91 labelmap, so
|
|
81078
|
-
* a preset import may carry either vocabulary). A label neither knows is left
|
|
81079
|
-
* out, and `preserveOriginal: false` drops it in the executor — the same
|
|
81080
|
-
* contract as the COCO map, now with the Frigate+ vocabulary in it.
|
|
81081
|
-
*/
|
|
81082
|
-
function buildFrigateClassMap(labels) {
|
|
81083
|
-
const mapping = {};
|
|
81084
|
-
for (const label of labels) {
|
|
81085
|
-
const target = FRIGATE_PLUS_TO_MACRO[label] ?? COCO_TO_MACRO.mapping[label];
|
|
81086
|
-
if (target !== void 0 && isClassMapMacroTarget(target)) mapping[label] = target;
|
|
81087
|
-
}
|
|
81088
|
-
return {
|
|
81089
|
-
mapping,
|
|
81090
|
-
preserveOriginal: false
|
|
81091
|
-
};
|
|
81092
|
-
}
|
|
81093
|
-
/**
|
|
81094
|
-
* Everything a Frigate / Frigate+ entry derives from ITS OWN labelmap: the
|
|
81095
|
-
* classMap and the steps it can supply (D730) — label and crop kinds alike.
|
|
81096
|
-
* Every Frigate builder spreads this at import, so the two cannot be derived
|
|
81097
|
-
* from different label lists, and no family is assumed to carry a label it
|
|
81098
|
-
* does not list.
|
|
81099
|
-
*/
|
|
81100
|
-
function frigateLabelFields(labels) {
|
|
81101
|
-
const classMap = buildFrigateClassMap(labels);
|
|
81102
|
-
const supplies = deriveRootSupplies(labels, classMap);
|
|
81103
|
-
return supplies.length > 0 ? {
|
|
81104
|
-
classMap,
|
|
81105
|
-
suppliesSteps: supplies
|
|
81106
|
-
} : { classMap };
|
|
81107
|
-
}
|
|
81108
|
-
/**
|
|
81109
|
-
* Per-class confidence-floor defaults of an imported stock Frigate detector
|
|
81110
|
-
* (D738): its per-detection `min_score` default, 0.5, for every class. Its
|
|
81111
|
-
* track-level `threshold` (the median of a track's recent scores) has no
|
|
81112
|
-
* counterpart in CamStack's per-detection floors and is not carried.
|
|
81113
|
-
*/
|
|
81114
|
-
var FRIGATE_STOCK_CLASS_FLOORS = Object.freeze({
|
|
81115
|
-
person: .5,
|
|
81116
|
-
vehicle: .5,
|
|
81117
|
-
animal: .5
|
|
81118
|
-
});
|
|
81119
|
-
/**
|
|
81120
|
-
* Per-class floor defaults of an imported Frigate+ detector (D738): the
|
|
81121
|
-
* documented starting `min_score` values for Frigate+ models, which score
|
|
81122
|
-
* higher than the stock ones (person 0.65, car 0.65, cat 0.65, dog 0.70). The
|
|
81123
|
-
* macro `animal` takes the lower of its classes, so no class is cut above its
|
|
81124
|
-
* documented value.
|
|
81125
|
-
*/
|
|
81126
|
-
var FRIGATE_PLUS_CLASS_FLOORS = Object.freeze({
|
|
81127
|
-
person: .65,
|
|
81128
|
-
vehicle: .65,
|
|
81129
|
-
animal: .65
|
|
81130
|
-
});
|
|
81131
|
-
/**
|
|
81132
|
-
* The `defaultClassFloors` an imported Frigate entry carries: the import's
|
|
81133
|
-
* own, when it states them, else the defaults of its kind. A fresh object.
|
|
81134
|
-
*/
|
|
81135
|
-
function frigateDefaultClassFloors(kind, carried) {
|
|
81136
|
-
if (carried !== void 0) return { ...carried };
|
|
81137
|
-
return { ...kind === "plus" ? FRIGATE_PLUS_CLASS_FLOORS : FRIGATE_STOCK_CLASS_FLOORS };
|
|
81138
|
-
}
|
|
81139
|
-
//#endregion
|
|
81140
|
-
//#region src/catalogs/device-state-vocabulary.ts
|
|
81141
|
-
/**
|
|
81142
|
-
* Most specific first. Extending this list is how a new device kind becomes
|
|
81143
|
-
* gateable; nothing else needs to change.
|
|
81144
|
-
*/
|
|
81145
|
-
var DEVICE_STATE_READERS = [
|
|
81146
|
-
{
|
|
81147
|
-
cap: "alarm-panel",
|
|
81148
|
-
field: "state"
|
|
81149
|
-
},
|
|
81150
|
-
{
|
|
81151
|
-
cap: "cover",
|
|
81152
|
-
field: "state"
|
|
81153
|
-
},
|
|
81154
|
-
{
|
|
81155
|
-
cap: "presence",
|
|
81156
|
-
field: "state"
|
|
81157
|
-
},
|
|
81158
|
-
{
|
|
81159
|
-
cap: "lock-control",
|
|
81160
|
-
field: "state"
|
|
81161
|
-
},
|
|
81162
|
-
{
|
|
81163
|
-
cap: "contact",
|
|
81164
|
-
field: "entryOpen",
|
|
81165
|
-
booleanWords: ["open", "closed"]
|
|
81166
|
-
},
|
|
81167
|
-
{
|
|
81168
|
-
cap: "switch",
|
|
81169
|
-
field: "on",
|
|
81170
|
-
booleanWords: ["on", "off"]
|
|
80064
|
+
cap: "switch",
|
|
80065
|
+
field: "on",
|
|
80066
|
+
booleanWords: ["on", "off"]
|
|
81171
80067
|
},
|
|
81172
80068
|
{
|
|
81173
80069
|
cap: "binary",
|
|
@@ -82556,7 +81452,7 @@ var BaseDeviceProvider = class extends require_sleep.BaseAddon {
|
|
|
82556
81452
|
* A top-level persisted row with NO configuration is a leftover, not a
|
|
82557
81453
|
* device — quarantine it instead of dialling it.
|
|
82558
81454
|
*
|
|
82559
|
-
* Device
|
|
81455
|
+
* Device 105 was deleted, resurrected as a config-less shell by a write
|
|
82560
81456
|
* already in flight (D376), and then dialled at every single boot: eight
|
|
82561
81457
|
* `Failed to restore device — bounded retry scheduled` lines in one day,
|
|
82562
81458
|
* each one the same Zod refusal on `host` and `password`. The bound was
|
|
@@ -83083,13 +81979,13 @@ function rank(type) {
|
|
|
83083
81979
|
*
|
|
83084
81980
|
* An exact case-insensitive match was not enough, and the failure was total
|
|
83085
81981
|
* rather than marginal. An ESPHome shutter arrives as a container named
|
|
83086
|
-
* `Tapparella-
|
|
83087
|
-
*
|
|
83088
|
-
* `tapparella-
|
|
81982
|
+
* `Tapparella-Kitchen` whose children include the COVER, named `Tapparella
|
|
81983
|
+
* kitchen`, and a device-presence entity carrying the slug verbatim,
|
|
81984
|
+
* `tapparella-kitchen`. The slug matched the container exactly and the cover
|
|
83089
81985
|
* did not, so the namesake tie-break handed the container to a connectivity
|
|
83090
81986
|
* indicator — and the viewer's accessory panel, which correctly shows only
|
|
83091
81987
|
* children with an actuating control, then rendered NOTHING. The operator saw
|
|
83092
|
-
* no shutters at all on
|
|
81988
|
+
* no shutters at all on kitchen, studio and both porch cameras (2026-09-22).
|
|
83093
81989
|
*
|
|
83094
81990
|
* `Markise` was the control case that proved the mechanism: there the cover
|
|
83095
81991
|
* really is called exactly like its container, so it won and appeared.
|
|
@@ -99191,148 +98087,1252 @@ function zodToConfigField(key, schema, description) {
|
|
|
99191
98087
|
...holdsSecret ? { secret: true } : {}
|
|
99192
98088
|
};
|
|
99193
98089
|
}
|
|
99194
|
-
return {
|
|
99195
|
-
...base,
|
|
99196
|
-
type: "text"
|
|
99197
|
-
};
|
|
99198
|
-
}
|
|
99199
|
-
function buildStringField(key, base) {
|
|
99200
|
-
const lowerKey = key.toLowerCase();
|
|
99201
|
-
if (lowerKey.includes("password") || lowerKey.includes("secret") || lowerKey.includes("token") || lowerKey.includes("apikey") || lowerKey.includes("api_key")) return {
|
|
99202
|
-
...base,
|
|
99203
|
-
type: "password",
|
|
99204
|
-
showToggle: true
|
|
99205
|
-
};
|
|
99206
|
-
return {
|
|
99207
|
-
...base,
|
|
99208
|
-
type: "text"
|
|
99209
|
-
};
|
|
99210
|
-
}
|
|
99211
|
-
function buildNumberField(inner, base) {
|
|
99212
|
-
const anyInner = zodInternals(inner);
|
|
99213
|
-
const rawMin = anyInner.minValue;
|
|
99214
|
-
const rawMax = anyInner.maxValue;
|
|
99215
|
-
const min = rawMin != null && isFinite(rawMin) ? rawMin : void 0;
|
|
99216
|
-
const max = rawMax != null && isFinite(rawMax) ? rawMax : void 0;
|
|
99217
|
-
const step = getMultipleOfStep(inner);
|
|
99218
|
-
return {
|
|
99219
|
-
...base,
|
|
99220
|
-
type: "number",
|
|
99221
|
-
...min !== void 0 ? { min } : {},
|
|
99222
|
-
...max !== void 0 ? { max } : {},
|
|
99223
|
-
...step !== void 0 ? { step } : {}
|
|
99224
|
-
};
|
|
99225
|
-
}
|
|
99226
|
-
function getMultipleOfStep(inner) {
|
|
99227
|
-
const checks = zodDef(inner).checks ?? [];
|
|
99228
|
-
for (const check of checks) if (check._zod?.def?.check === "multiple_of" && check._zod.def.value !== void 0) return check._zod.def.value;
|
|
99229
|
-
}
|
|
99230
|
-
function buildEnumField(inner, base) {
|
|
99231
|
-
const values = inner.options.map((v) => String(v));
|
|
99232
|
-
return {
|
|
99233
|
-
...base,
|
|
99234
|
-
type: "select",
|
|
99235
|
-
options: values.map((v) => ({
|
|
99236
|
-
label: humanizeKey(v),
|
|
99237
|
-
value: v
|
|
99238
|
-
}))
|
|
99239
|
-
};
|
|
99240
|
-
}
|
|
99241
|
-
function unwrapZod(schema) {
|
|
99242
|
-
if (schema instanceof zod.z.ZodDefault) return unwrapZod(zodDef(schema).innerType);
|
|
99243
|
-
if (schema instanceof zod.z.ZodOptional) return unwrapZod(zodDef(schema).innerType);
|
|
99244
|
-
if (schema instanceof zod.z.ZodNullable) return unwrapZod(zodDef(schema).innerType);
|
|
99245
|
-
return schema;
|
|
99246
|
-
}
|
|
99247
|
-
function getZodDefault(schema) {
|
|
99248
|
-
if (schema instanceof zod.z.ZodDefault) return zodDef(schema).defaultValue;
|
|
99249
|
-
}
|
|
99250
|
-
function humanizeKey(key) {
|
|
99251
|
-
return key.replace(/([A-Z])/g, " $1").replace(/[_-]/g, " ").replace(/^\w/, (c) => c.toUpperCase()).trim();
|
|
99252
|
-
}
|
|
99253
|
-
//#endregion
|
|
99254
|
-
//#region src/generated/cap-status-types.ts
|
|
98090
|
+
return {
|
|
98091
|
+
...base,
|
|
98092
|
+
type: "text"
|
|
98093
|
+
};
|
|
98094
|
+
}
|
|
98095
|
+
function buildStringField(key, base) {
|
|
98096
|
+
const lowerKey = key.toLowerCase();
|
|
98097
|
+
if (lowerKey.includes("password") || lowerKey.includes("secret") || lowerKey.includes("token") || lowerKey.includes("apikey") || lowerKey.includes("api_key")) return {
|
|
98098
|
+
...base,
|
|
98099
|
+
type: "password",
|
|
98100
|
+
showToggle: true
|
|
98101
|
+
};
|
|
98102
|
+
return {
|
|
98103
|
+
...base,
|
|
98104
|
+
type: "text"
|
|
98105
|
+
};
|
|
98106
|
+
}
|
|
98107
|
+
function buildNumberField(inner, base) {
|
|
98108
|
+
const anyInner = zodInternals(inner);
|
|
98109
|
+
const rawMin = anyInner.minValue;
|
|
98110
|
+
const rawMax = anyInner.maxValue;
|
|
98111
|
+
const min = rawMin != null && isFinite(rawMin) ? rawMin : void 0;
|
|
98112
|
+
const max = rawMax != null && isFinite(rawMax) ? rawMax : void 0;
|
|
98113
|
+
const step = getMultipleOfStep(inner);
|
|
98114
|
+
return {
|
|
98115
|
+
...base,
|
|
98116
|
+
type: "number",
|
|
98117
|
+
...min !== void 0 ? { min } : {},
|
|
98118
|
+
...max !== void 0 ? { max } : {},
|
|
98119
|
+
...step !== void 0 ? { step } : {}
|
|
98120
|
+
};
|
|
98121
|
+
}
|
|
98122
|
+
function getMultipleOfStep(inner) {
|
|
98123
|
+
const checks = zodDef(inner).checks ?? [];
|
|
98124
|
+
for (const check of checks) if (check._zod?.def?.check === "multiple_of" && check._zod.def.value !== void 0) return check._zod.def.value;
|
|
98125
|
+
}
|
|
98126
|
+
function buildEnumField(inner, base) {
|
|
98127
|
+
const values = inner.options.map((v) => String(v));
|
|
98128
|
+
return {
|
|
98129
|
+
...base,
|
|
98130
|
+
type: "select",
|
|
98131
|
+
options: values.map((v) => ({
|
|
98132
|
+
label: humanizeKey(v),
|
|
98133
|
+
value: v
|
|
98134
|
+
}))
|
|
98135
|
+
};
|
|
98136
|
+
}
|
|
98137
|
+
function unwrapZod(schema) {
|
|
98138
|
+
if (schema instanceof zod.z.ZodDefault) return unwrapZod(zodDef(schema).innerType);
|
|
98139
|
+
if (schema instanceof zod.z.ZodOptional) return unwrapZod(zodDef(schema).innerType);
|
|
98140
|
+
if (schema instanceof zod.z.ZodNullable) return unwrapZod(zodDef(schema).innerType);
|
|
98141
|
+
return schema;
|
|
98142
|
+
}
|
|
98143
|
+
function getZodDefault(schema) {
|
|
98144
|
+
if (schema instanceof zod.z.ZodDefault) return zodDef(schema).defaultValue;
|
|
98145
|
+
}
|
|
98146
|
+
function humanizeKey(key) {
|
|
98147
|
+
return key.replace(/([A-Z])/g, " $1").replace(/[_-]/g, " ").replace(/^\w/, (c) => c.toUpperCase()).trim();
|
|
98148
|
+
}
|
|
98149
|
+
//#endregion
|
|
98150
|
+
//#region src/generated/cap-status-types.ts
|
|
98151
|
+
/**
|
|
98152
|
+
* Runtime list of cap names with status. Used by the settings
|
|
98153
|
+
* aggregator to enumerate caps whose `status` should be polled +
|
|
98154
|
+
* streamed via `subscribeDeviceStatusAggregate`.
|
|
98155
|
+
*/
|
|
98156
|
+
var CAP_NAMES_WITH_STATUS = [
|
|
98157
|
+
"accessories",
|
|
98158
|
+
"air-quality-sensor",
|
|
98159
|
+
"alarm-panel",
|
|
98160
|
+
"ambient-light-sensor",
|
|
98161
|
+
"automation-control",
|
|
98162
|
+
"battery",
|
|
98163
|
+
"binary",
|
|
98164
|
+
"brightness",
|
|
98165
|
+
"broker",
|
|
98166
|
+
"camera-credentials",
|
|
98167
|
+
"carbon-monoxide",
|
|
98168
|
+
"climate-control",
|
|
98169
|
+
"color",
|
|
98170
|
+
"connectivity",
|
|
98171
|
+
"consumables",
|
|
98172
|
+
"contact",
|
|
98173
|
+
"control",
|
|
98174
|
+
"cover",
|
|
98175
|
+
"day-night",
|
|
98176
|
+
"device-adoption",
|
|
98177
|
+
"device-discovery",
|
|
98178
|
+
"device-export",
|
|
98179
|
+
"device-status",
|
|
98180
|
+
"dishwasher",
|
|
98181
|
+
"doorbell",
|
|
98182
|
+
"enum-sensor",
|
|
98183
|
+
"event-emitter",
|
|
98184
|
+
"fan-control",
|
|
98185
|
+
"feature-probe",
|
|
98186
|
+
"flood",
|
|
98187
|
+
"gas",
|
|
98188
|
+
"heating-valve",
|
|
98189
|
+
"humidifier",
|
|
98190
|
+
"humidity-sensor",
|
|
98191
|
+
"image",
|
|
98192
|
+
"image-settings",
|
|
98193
|
+
"intercom",
|
|
98194
|
+
"lawn-mower-control",
|
|
98195
|
+
"lock-control",
|
|
98196
|
+
"media-player",
|
|
98197
|
+
"motion",
|
|
98198
|
+
"motion-trigger",
|
|
98199
|
+
"motion-zones",
|
|
98200
|
+
"mqtt-broker",
|
|
98201
|
+
"native-object-detection",
|
|
98202
|
+
"navigation",
|
|
98203
|
+
"network-link",
|
|
98204
|
+
"notifier",
|
|
98205
|
+
"numeric-sensor",
|
|
98206
|
+
"osd",
|
|
98207
|
+
"pet-feeder",
|
|
98208
|
+
"power-meter",
|
|
98209
|
+
"presence",
|
|
98210
|
+
"pressure-sensor",
|
|
98211
|
+
"privacy-mask",
|
|
98212
|
+
"ptz",
|
|
98213
|
+
"ptz-autotrack",
|
|
98214
|
+
"recording-archive",
|
|
98215
|
+
"recording-onboard",
|
|
98216
|
+
"recording-signal",
|
|
98217
|
+
"running-state",
|
|
98218
|
+
"scene-monitor",
|
|
98219
|
+
"script-runner",
|
|
98220
|
+
"smoke",
|
|
98221
|
+
"snapshot",
|
|
98222
|
+
"stream-params",
|
|
98223
|
+
"switch",
|
|
98224
|
+
"tamper",
|
|
98225
|
+
"temperature-sensor",
|
|
98226
|
+
"update",
|
|
98227
|
+
"vacuum-control",
|
|
98228
|
+
"valve",
|
|
98229
|
+
"vibration",
|
|
98230
|
+
"water-heater",
|
|
98231
|
+
"weather"
|
|
98232
|
+
];
|
|
98233
|
+
//#endregion
|
|
98234
|
+
//#region src/generated/capability-router-map.ts
|
|
98235
|
+
var CAPABILITY_NAMES = {
|
|
98236
|
+
accessories: "accessories",
|
|
98237
|
+
addonPages: "addon-pages",
|
|
98238
|
+
addonPagesSource: "addon-pages-source",
|
|
98239
|
+
addonRoutes: "addon-routes",
|
|
98240
|
+
addonSettings: "addon-settings",
|
|
98241
|
+
addonWidgets: "addon-widgets",
|
|
98242
|
+
addonWidgetsSource: "addon-widgets-source",
|
|
98243
|
+
addons: "addons",
|
|
98244
|
+
adminUi: "admin-ui",
|
|
98245
|
+
airQualitySensor: "air-quality-sensor",
|
|
98246
|
+
alarmPanel: "alarm-panel",
|
|
98247
|
+
alerts: "alerts",
|
|
98248
|
+
ambientLightSensor: "ambient-light-sensor",
|
|
98249
|
+
audioAnalysis: "audio-analysis",
|
|
98250
|
+
audioAnalyzer: "audio-analyzer",
|
|
98251
|
+
audioCodec: "audio-codec",
|
|
98252
|
+
audioMetrics: "audio-metrics",
|
|
98253
|
+
authProvider: "auth-provider",
|
|
98254
|
+
automationControl: "automation-control",
|
|
98255
|
+
backup: "backup",
|
|
98256
|
+
battery: "battery",
|
|
98257
|
+
binary: "binary",
|
|
98258
|
+
brightness: "brightness",
|
|
98259
|
+
broker: "broker",
|
|
98260
|
+
button: "button",
|
|
98261
|
+
calendarSource: "calendar-source",
|
|
98262
|
+
calendars: "calendars",
|
|
98263
|
+
cameraCredentials: "camera-credentials",
|
|
98264
|
+
cameraGridLayout: "camera-grid-layout",
|
|
98265
|
+
cameraPipelineConfig: "camera-pipeline-config",
|
|
98266
|
+
cameraStreams: "camera-streams",
|
|
98267
|
+
carbonMonoxide: "carbon-monoxide",
|
|
98268
|
+
climateControl: "climate-control",
|
|
98269
|
+
color: "color",
|
|
98270
|
+
composer: "composer",
|
|
98271
|
+
connectionTest: "connection-test",
|
|
98272
|
+
connectivity: "connectivity",
|
|
98273
|
+
consumables: "consumables",
|
|
98274
|
+
contact: "contact",
|
|
98275
|
+
control: "control",
|
|
98276
|
+
coreBlocks: "core-blocks",
|
|
98277
|
+
cover: "cover",
|
|
98278
|
+
customModelRegistry: "custom-model-registry",
|
|
98279
|
+
dataStoreProvider: "data-store-provider",
|
|
98280
|
+
databaseSnapshot: "database-snapshot",
|
|
98281
|
+
dayNight: "day-night",
|
|
98282
|
+
decoder: "decoder",
|
|
98283
|
+
detectionPipeline: "detection-pipeline",
|
|
98284
|
+
deviceAdminLink: "device-admin-link",
|
|
98285
|
+
deviceAdoption: "device-adoption",
|
|
98286
|
+
deviceCredentials: "device-credentials",
|
|
98287
|
+
deviceDiscovery: "device-discovery",
|
|
98288
|
+
deviceExport: "device-export",
|
|
98289
|
+
deviceExtension: "device-extension",
|
|
98290
|
+
deviceHistory: "device-history",
|
|
98291
|
+
deviceManager: "device-manager",
|
|
98292
|
+
deviceOps: "device-ops",
|
|
98293
|
+
deviceProvider: "device-provider",
|
|
98294
|
+
deviceRemovalHook: "device-removal-hook",
|
|
98295
|
+
deviceState: "device-state",
|
|
98296
|
+
deviceStatus: "device-status",
|
|
98297
|
+
dishwasher: "dishwasher",
|
|
98298
|
+
displayPalette: "display-palette",
|
|
98299
|
+
doorbell: "doorbell",
|
|
98300
|
+
embeddingEncoder: "embedding-encoder",
|
|
98301
|
+
enumSensor: "enum-sensor",
|
|
98302
|
+
eventEmitter: "event-emitter",
|
|
98303
|
+
faceGallery: "face-gallery",
|
|
98304
|
+
failureContribution: "failure-contribution",
|
|
98305
|
+
fanControl: "fan-control",
|
|
98306
|
+
featureProbe: "feature-probe",
|
|
98307
|
+
filesystemBrowse: "filesystem-browse",
|
|
98308
|
+
flood: "flood",
|
|
98309
|
+
gas: "gas",
|
|
98310
|
+
heatingValve: "heating-valve",
|
|
98311
|
+
humidifier: "humidifier",
|
|
98312
|
+
humiditySensor: "humidity-sensor",
|
|
98313
|
+
image: "image",
|
|
98314
|
+
imageSettings: "image-settings",
|
|
98315
|
+
integrations: "integrations",
|
|
98316
|
+
intercom: "intercom",
|
|
98317
|
+
keychain: "keychain",
|
|
98318
|
+
keychainAdmin: "keychain-admin",
|
|
98319
|
+
lawnMowerControl: "lawn-mower-control",
|
|
98320
|
+
llm: "llm",
|
|
98321
|
+
llmRuntime: "llm-runtime",
|
|
98322
|
+
loadContribution: "load-contribution",
|
|
98323
|
+
localNetwork: "local-network",
|
|
98324
|
+
lockControl: "lock-control",
|
|
98325
|
+
logChannels: "log-channels",
|
|
98326
|
+
logDestination: "log-destination",
|
|
98327
|
+
loginMethod: "login-method",
|
|
98328
|
+
mediaPlayer: "media-player",
|
|
98329
|
+
meshNetwork: "mesh-network",
|
|
98330
|
+
metricsProvider: "metrics-provider",
|
|
98331
|
+
modelConvert: "model-convert",
|
|
98332
|
+
modelDistributor: "model-distributor",
|
|
98333
|
+
motion: "motion",
|
|
98334
|
+
motionDetection: "motion-detection",
|
|
98335
|
+
motionTrigger: "motion-trigger",
|
|
98336
|
+
motionZones: "motion-zones",
|
|
98337
|
+
mqttBroker: "mqtt-broker",
|
|
98338
|
+
nativeObjectDetection: "native-object-detection",
|
|
98339
|
+
navigation: "navigation",
|
|
98340
|
+
networkAccess: "network-access",
|
|
98341
|
+
networkLink: "network-link",
|
|
98342
|
+
networkQuality: "network-quality",
|
|
98343
|
+
nodeCertificates: "node-certificates",
|
|
98344
|
+
nodes: "nodes",
|
|
98345
|
+
notificationOutput: "notification-output",
|
|
98346
|
+
notificationRules: "notification-rules",
|
|
98347
|
+
notifier: "notifier",
|
|
98348
|
+
numericSensor: "numeric-sensor",
|
|
98349
|
+
oauthIntegration: "oauth-integration",
|
|
98350
|
+
oidcConnections: "oidc-connections",
|
|
98351
|
+
osd: "osd",
|
|
98352
|
+
osdManager: "osd-manager",
|
|
98353
|
+
petFeeder: "pet-feeder",
|
|
98354
|
+
pipelineAnalytics: "pipeline-analytics",
|
|
98355
|
+
pipelineExecutor: "pipeline-executor",
|
|
98356
|
+
pipelineOrchestrator: "pipeline-orchestrator",
|
|
98357
|
+
pipelineRunner: "pipeline-runner",
|
|
98358
|
+
plateGallery: "plate-gallery",
|
|
98359
|
+
platformProbe: "platform-probe",
|
|
98360
|
+
powerMeter: "power-meter",
|
|
98361
|
+
presence: "presence",
|
|
98362
|
+
pressureSensor: "pressure-sensor",
|
|
98363
|
+
privacyMask: "privacy-mask",
|
|
98364
|
+
ptz: "ptz",
|
|
98365
|
+
ptzAutotrack: "ptz-autotrack",
|
|
98366
|
+
reboot: "reboot",
|
|
98367
|
+
recordEntries: "record-entries",
|
|
98368
|
+
recording: "recording",
|
|
98369
|
+
recordingArchive: "recording-archive",
|
|
98370
|
+
recordingExport: "recording-export",
|
|
98371
|
+
recordingOnboard: "recording-onboard",
|
|
98372
|
+
recordingSignal: "recording-signal",
|
|
98373
|
+
records: "records",
|
|
98374
|
+
runningState: "running-state",
|
|
98375
|
+
sceneMonitor: "scene-monitor",
|
|
98376
|
+
scriptRunner: "script-runner",
|
|
98377
|
+
serverManagement: "server-management",
|
|
98378
|
+
settingsStore: "settings-store",
|
|
98379
|
+
smoke: "smoke",
|
|
98380
|
+
smtpProvider: "smtp-provider",
|
|
98381
|
+
snapshot: "snapshot",
|
|
98382
|
+
ssoBridge: "sso-bridge",
|
|
98383
|
+
storage: "storage",
|
|
98384
|
+
storageAdmin: "storage-admin",
|
|
98385
|
+
storageEvictable: "storage-evictable",
|
|
98386
|
+
storageMigration: "storage-migration",
|
|
98387
|
+
storageOccupancy: "storage-occupancy",
|
|
98388
|
+
storageProvider: "storage-provider",
|
|
98389
|
+
streamBroker: "stream-broker",
|
|
98390
|
+
streamCatalog: "stream-catalog",
|
|
98391
|
+
streamParams: "stream-params",
|
|
98392
|
+
streamSignals: "stream-signals",
|
|
98393
|
+
switch: "switch",
|
|
98394
|
+
system: "system",
|
|
98395
|
+
tamper: "tamper",
|
|
98396
|
+
temperatureSensor: "temperature-sensor",
|
|
98397
|
+
terminalSession: "terminal-session",
|
|
98398
|
+
toast: "toast",
|
|
98399
|
+
training: "training",
|
|
98400
|
+
trainingProvider: "training-provider",
|
|
98401
|
+
turnProvider: "turn-provider",
|
|
98402
|
+
update: "update",
|
|
98403
|
+
userManagement: "user-management",
|
|
98404
|
+
userPasskeys: "user-passkeys",
|
|
98405
|
+
vacuumControl: "vacuum-control",
|
|
98406
|
+
valve: "valve",
|
|
98407
|
+
vectorStore: "vector-store",
|
|
98408
|
+
vibration: "vibration",
|
|
98409
|
+
videoclips: "videoclips",
|
|
98410
|
+
viewerUi: "viewer-ui",
|
|
98411
|
+
waterHeater: "water-heater",
|
|
98412
|
+
weather: "weather",
|
|
98413
|
+
webrtcSession: "webrtc-session",
|
|
98414
|
+
zoneAnalytics: "zone-analytics",
|
|
98415
|
+
zoneRules: "zone-rules",
|
|
98416
|
+
zones: "zones"
|
|
98417
|
+
};
|
|
98418
|
+
/** Router key → capability name mapping for auto-mount. */
|
|
98419
|
+
var CAPABILITY_ROUTER_KEYS = [
|
|
98420
|
+
{
|
|
98421
|
+
key: "accessories",
|
|
98422
|
+
name: "accessories"
|
|
98423
|
+
},
|
|
98424
|
+
{
|
|
98425
|
+
key: "addonPages",
|
|
98426
|
+
name: "addon-pages"
|
|
98427
|
+
},
|
|
98428
|
+
{
|
|
98429
|
+
key: "addonPagesSource",
|
|
98430
|
+
name: "addon-pages-source"
|
|
98431
|
+
},
|
|
98432
|
+
{
|
|
98433
|
+
key: "addonRoutes",
|
|
98434
|
+
name: "addon-routes"
|
|
98435
|
+
},
|
|
98436
|
+
{
|
|
98437
|
+
key: "addonSettings",
|
|
98438
|
+
name: "addon-settings"
|
|
98439
|
+
},
|
|
98440
|
+
{
|
|
98441
|
+
key: "addonWidgets",
|
|
98442
|
+
name: "addon-widgets"
|
|
98443
|
+
},
|
|
98444
|
+
{
|
|
98445
|
+
key: "addonWidgetsSource",
|
|
98446
|
+
name: "addon-widgets-source"
|
|
98447
|
+
},
|
|
98448
|
+
{
|
|
98449
|
+
key: "addons",
|
|
98450
|
+
name: "addons"
|
|
98451
|
+
},
|
|
98452
|
+
{
|
|
98453
|
+
key: "adminUi",
|
|
98454
|
+
name: "admin-ui"
|
|
98455
|
+
},
|
|
98456
|
+
{
|
|
98457
|
+
key: "airQualitySensor",
|
|
98458
|
+
name: "air-quality-sensor"
|
|
98459
|
+
},
|
|
98460
|
+
{
|
|
98461
|
+
key: "alarmPanel",
|
|
98462
|
+
name: "alarm-panel"
|
|
98463
|
+
},
|
|
98464
|
+
{
|
|
98465
|
+
key: "alerts",
|
|
98466
|
+
name: "alerts"
|
|
98467
|
+
},
|
|
98468
|
+
{
|
|
98469
|
+
key: "ambientLightSensor",
|
|
98470
|
+
name: "ambient-light-sensor"
|
|
98471
|
+
},
|
|
98472
|
+
{
|
|
98473
|
+
key: "audioAnalysis",
|
|
98474
|
+
name: "audio-analysis"
|
|
98475
|
+
},
|
|
98476
|
+
{
|
|
98477
|
+
key: "audioAnalyzer",
|
|
98478
|
+
name: "audio-analyzer"
|
|
98479
|
+
},
|
|
98480
|
+
{
|
|
98481
|
+
key: "audioCodec",
|
|
98482
|
+
name: "audio-codec"
|
|
98483
|
+
},
|
|
98484
|
+
{
|
|
98485
|
+
key: "audioMetrics",
|
|
98486
|
+
name: "audio-metrics"
|
|
98487
|
+
},
|
|
98488
|
+
{
|
|
98489
|
+
key: "authProvider",
|
|
98490
|
+
name: "auth-provider"
|
|
98491
|
+
},
|
|
98492
|
+
{
|
|
98493
|
+
key: "automationControl",
|
|
98494
|
+
name: "automation-control"
|
|
98495
|
+
},
|
|
98496
|
+
{
|
|
98497
|
+
key: "backup",
|
|
98498
|
+
name: "backup"
|
|
98499
|
+
},
|
|
98500
|
+
{
|
|
98501
|
+
key: "battery",
|
|
98502
|
+
name: "battery"
|
|
98503
|
+
},
|
|
98504
|
+
{
|
|
98505
|
+
key: "binary",
|
|
98506
|
+
name: "binary"
|
|
98507
|
+
},
|
|
98508
|
+
{
|
|
98509
|
+
key: "brightness",
|
|
98510
|
+
name: "brightness"
|
|
98511
|
+
},
|
|
98512
|
+
{
|
|
98513
|
+
key: "broker",
|
|
98514
|
+
name: "broker"
|
|
98515
|
+
},
|
|
98516
|
+
{
|
|
98517
|
+
key: "button",
|
|
98518
|
+
name: "button"
|
|
98519
|
+
},
|
|
98520
|
+
{
|
|
98521
|
+
key: "calendarSource",
|
|
98522
|
+
name: "calendar-source"
|
|
98523
|
+
},
|
|
98524
|
+
{
|
|
98525
|
+
key: "calendars",
|
|
98526
|
+
name: "calendars"
|
|
98527
|
+
},
|
|
98528
|
+
{
|
|
98529
|
+
key: "cameraCredentials",
|
|
98530
|
+
name: "camera-credentials"
|
|
98531
|
+
},
|
|
98532
|
+
{
|
|
98533
|
+
key: "cameraGridLayout",
|
|
98534
|
+
name: "camera-grid-layout"
|
|
98535
|
+
},
|
|
98536
|
+
{
|
|
98537
|
+
key: "cameraPipelineConfig",
|
|
98538
|
+
name: "camera-pipeline-config"
|
|
98539
|
+
},
|
|
98540
|
+
{
|
|
98541
|
+
key: "cameraStreams",
|
|
98542
|
+
name: "camera-streams"
|
|
98543
|
+
},
|
|
98544
|
+
{
|
|
98545
|
+
key: "carbonMonoxide",
|
|
98546
|
+
name: "carbon-monoxide"
|
|
98547
|
+
},
|
|
98548
|
+
{
|
|
98549
|
+
key: "climateControl",
|
|
98550
|
+
name: "climate-control"
|
|
98551
|
+
},
|
|
98552
|
+
{
|
|
98553
|
+
key: "color",
|
|
98554
|
+
name: "color"
|
|
98555
|
+
},
|
|
98556
|
+
{
|
|
98557
|
+
key: "composer",
|
|
98558
|
+
name: "composer"
|
|
98559
|
+
},
|
|
98560
|
+
{
|
|
98561
|
+
key: "connectionTest",
|
|
98562
|
+
name: "connection-test"
|
|
98563
|
+
},
|
|
98564
|
+
{
|
|
98565
|
+
key: "connectivity",
|
|
98566
|
+
name: "connectivity"
|
|
98567
|
+
},
|
|
98568
|
+
{
|
|
98569
|
+
key: "consumables",
|
|
98570
|
+
name: "consumables"
|
|
98571
|
+
},
|
|
98572
|
+
{
|
|
98573
|
+
key: "contact",
|
|
98574
|
+
name: "contact"
|
|
98575
|
+
},
|
|
98576
|
+
{
|
|
98577
|
+
key: "control",
|
|
98578
|
+
name: "control"
|
|
98579
|
+
},
|
|
98580
|
+
{
|
|
98581
|
+
key: "coreBlocks",
|
|
98582
|
+
name: "core-blocks"
|
|
98583
|
+
},
|
|
98584
|
+
{
|
|
98585
|
+
key: "cover",
|
|
98586
|
+
name: "cover"
|
|
98587
|
+
},
|
|
98588
|
+
{
|
|
98589
|
+
key: "customModelRegistry",
|
|
98590
|
+
name: "custom-model-registry"
|
|
98591
|
+
},
|
|
98592
|
+
{
|
|
98593
|
+
key: "dataStoreProvider",
|
|
98594
|
+
name: "data-store-provider"
|
|
98595
|
+
},
|
|
98596
|
+
{
|
|
98597
|
+
key: "databaseSnapshot",
|
|
98598
|
+
name: "database-snapshot"
|
|
98599
|
+
},
|
|
98600
|
+
{
|
|
98601
|
+
key: "dayNight",
|
|
98602
|
+
name: "day-night"
|
|
98603
|
+
},
|
|
98604
|
+
{
|
|
98605
|
+
key: "decoder",
|
|
98606
|
+
name: "decoder"
|
|
98607
|
+
},
|
|
98608
|
+
{
|
|
98609
|
+
key: "detectionPipeline",
|
|
98610
|
+
name: "detection-pipeline"
|
|
98611
|
+
},
|
|
98612
|
+
{
|
|
98613
|
+
key: "deviceAdminLink",
|
|
98614
|
+
name: "device-admin-link"
|
|
98615
|
+
},
|
|
98616
|
+
{
|
|
98617
|
+
key: "deviceAdoption",
|
|
98618
|
+
name: "device-adoption"
|
|
98619
|
+
},
|
|
98620
|
+
{
|
|
98621
|
+
key: "deviceCredentials",
|
|
98622
|
+
name: "device-credentials"
|
|
98623
|
+
},
|
|
98624
|
+
{
|
|
98625
|
+
key: "deviceDiscovery",
|
|
98626
|
+
name: "device-discovery"
|
|
98627
|
+
},
|
|
98628
|
+
{
|
|
98629
|
+
key: "deviceExport",
|
|
98630
|
+
name: "device-export"
|
|
98631
|
+
},
|
|
98632
|
+
{
|
|
98633
|
+
key: "deviceExtension",
|
|
98634
|
+
name: "device-extension"
|
|
98635
|
+
},
|
|
98636
|
+
{
|
|
98637
|
+
key: "deviceHistory",
|
|
98638
|
+
name: "device-history"
|
|
98639
|
+
},
|
|
98640
|
+
{
|
|
98641
|
+
key: "deviceManager",
|
|
98642
|
+
name: "device-manager"
|
|
98643
|
+
},
|
|
98644
|
+
{
|
|
98645
|
+
key: "deviceOps",
|
|
98646
|
+
name: "device-ops"
|
|
98647
|
+
},
|
|
98648
|
+
{
|
|
98649
|
+
key: "deviceProvider",
|
|
98650
|
+
name: "device-provider"
|
|
98651
|
+
},
|
|
98652
|
+
{
|
|
98653
|
+
key: "deviceRemovalHook",
|
|
98654
|
+
name: "device-removal-hook"
|
|
98655
|
+
},
|
|
98656
|
+
{
|
|
98657
|
+
key: "deviceState",
|
|
98658
|
+
name: "device-state"
|
|
98659
|
+
},
|
|
98660
|
+
{
|
|
98661
|
+
key: "deviceStatus",
|
|
98662
|
+
name: "device-status"
|
|
98663
|
+
},
|
|
98664
|
+
{
|
|
98665
|
+
key: "dishwasher",
|
|
98666
|
+
name: "dishwasher"
|
|
98667
|
+
},
|
|
98668
|
+
{
|
|
98669
|
+
key: "displayPalette",
|
|
98670
|
+
name: "display-palette"
|
|
98671
|
+
},
|
|
98672
|
+
{
|
|
98673
|
+
key: "doorbell",
|
|
98674
|
+
name: "doorbell"
|
|
98675
|
+
},
|
|
98676
|
+
{
|
|
98677
|
+
key: "embeddingEncoder",
|
|
98678
|
+
name: "embedding-encoder"
|
|
98679
|
+
},
|
|
98680
|
+
{
|
|
98681
|
+
key: "enumSensor",
|
|
98682
|
+
name: "enum-sensor"
|
|
98683
|
+
},
|
|
98684
|
+
{
|
|
98685
|
+
key: "eventEmitter",
|
|
98686
|
+
name: "event-emitter"
|
|
98687
|
+
},
|
|
98688
|
+
{
|
|
98689
|
+
key: "faceGallery",
|
|
98690
|
+
name: "face-gallery"
|
|
98691
|
+
},
|
|
98692
|
+
{
|
|
98693
|
+
key: "failureContribution",
|
|
98694
|
+
name: "failure-contribution"
|
|
98695
|
+
},
|
|
98696
|
+
{
|
|
98697
|
+
key: "fanControl",
|
|
98698
|
+
name: "fan-control"
|
|
98699
|
+
},
|
|
98700
|
+
{
|
|
98701
|
+
key: "featureProbe",
|
|
98702
|
+
name: "feature-probe"
|
|
98703
|
+
},
|
|
98704
|
+
{
|
|
98705
|
+
key: "filesystemBrowse",
|
|
98706
|
+
name: "filesystem-browse"
|
|
98707
|
+
},
|
|
98708
|
+
{
|
|
98709
|
+
key: "flood",
|
|
98710
|
+
name: "flood"
|
|
98711
|
+
},
|
|
98712
|
+
{
|
|
98713
|
+
key: "gas",
|
|
98714
|
+
name: "gas"
|
|
98715
|
+
},
|
|
98716
|
+
{
|
|
98717
|
+
key: "heatingValve",
|
|
98718
|
+
name: "heating-valve"
|
|
98719
|
+
},
|
|
98720
|
+
{
|
|
98721
|
+
key: "humidifier",
|
|
98722
|
+
name: "humidifier"
|
|
98723
|
+
},
|
|
98724
|
+
{
|
|
98725
|
+
key: "humiditySensor",
|
|
98726
|
+
name: "humidity-sensor"
|
|
98727
|
+
},
|
|
98728
|
+
{
|
|
98729
|
+
key: "image",
|
|
98730
|
+
name: "image"
|
|
98731
|
+
},
|
|
98732
|
+
{
|
|
98733
|
+
key: "imageSettings",
|
|
98734
|
+
name: "image-settings"
|
|
98735
|
+
},
|
|
98736
|
+
{
|
|
98737
|
+
key: "integrations",
|
|
98738
|
+
name: "integrations"
|
|
98739
|
+
},
|
|
98740
|
+
{
|
|
98741
|
+
key: "intercom",
|
|
98742
|
+
name: "intercom"
|
|
98743
|
+
},
|
|
98744
|
+
{
|
|
98745
|
+
key: "keychain",
|
|
98746
|
+
name: "keychain"
|
|
98747
|
+
},
|
|
98748
|
+
{
|
|
98749
|
+
key: "keychainAdmin",
|
|
98750
|
+
name: "keychain-admin"
|
|
98751
|
+
},
|
|
98752
|
+
{
|
|
98753
|
+
key: "lawnMowerControl",
|
|
98754
|
+
name: "lawn-mower-control"
|
|
98755
|
+
},
|
|
98756
|
+
{
|
|
98757
|
+
key: "llm",
|
|
98758
|
+
name: "llm"
|
|
98759
|
+
},
|
|
98760
|
+
{
|
|
98761
|
+
key: "llmRuntime",
|
|
98762
|
+
name: "llm-runtime"
|
|
98763
|
+
},
|
|
98764
|
+
{
|
|
98765
|
+
key: "loadContribution",
|
|
98766
|
+
name: "load-contribution"
|
|
98767
|
+
},
|
|
98768
|
+
{
|
|
98769
|
+
key: "localNetwork",
|
|
98770
|
+
name: "local-network"
|
|
98771
|
+
},
|
|
98772
|
+
{
|
|
98773
|
+
key: "lockControl",
|
|
98774
|
+
name: "lock-control"
|
|
98775
|
+
},
|
|
98776
|
+
{
|
|
98777
|
+
key: "logChannels",
|
|
98778
|
+
name: "log-channels"
|
|
98779
|
+
},
|
|
98780
|
+
{
|
|
98781
|
+
key: "logDestination",
|
|
98782
|
+
name: "log-destination"
|
|
98783
|
+
},
|
|
98784
|
+
{
|
|
98785
|
+
key: "loginMethod",
|
|
98786
|
+
name: "login-method"
|
|
98787
|
+
},
|
|
98788
|
+
{
|
|
98789
|
+
key: "mediaPlayer",
|
|
98790
|
+
name: "media-player"
|
|
98791
|
+
},
|
|
98792
|
+
{
|
|
98793
|
+
key: "meshNetwork",
|
|
98794
|
+
name: "mesh-network"
|
|
98795
|
+
},
|
|
98796
|
+
{
|
|
98797
|
+
key: "metricsProvider",
|
|
98798
|
+
name: "metrics-provider"
|
|
98799
|
+
},
|
|
98800
|
+
{
|
|
98801
|
+
key: "modelConvert",
|
|
98802
|
+
name: "model-convert"
|
|
98803
|
+
},
|
|
98804
|
+
{
|
|
98805
|
+
key: "modelDistributor",
|
|
98806
|
+
name: "model-distributor"
|
|
98807
|
+
},
|
|
98808
|
+
{
|
|
98809
|
+
key: "motion",
|
|
98810
|
+
name: "motion"
|
|
98811
|
+
},
|
|
98812
|
+
{
|
|
98813
|
+
key: "motionDetection",
|
|
98814
|
+
name: "motion-detection"
|
|
98815
|
+
},
|
|
98816
|
+
{
|
|
98817
|
+
key: "motionTrigger",
|
|
98818
|
+
name: "motion-trigger"
|
|
98819
|
+
},
|
|
98820
|
+
{
|
|
98821
|
+
key: "motionZones",
|
|
98822
|
+
name: "motion-zones"
|
|
98823
|
+
},
|
|
98824
|
+
{
|
|
98825
|
+
key: "mqttBroker",
|
|
98826
|
+
name: "mqtt-broker"
|
|
98827
|
+
},
|
|
98828
|
+
{
|
|
98829
|
+
key: "nativeObjectDetection",
|
|
98830
|
+
name: "native-object-detection"
|
|
98831
|
+
},
|
|
98832
|
+
{
|
|
98833
|
+
key: "navigation",
|
|
98834
|
+
name: "navigation"
|
|
98835
|
+
},
|
|
98836
|
+
{
|
|
98837
|
+
key: "networkAccess",
|
|
98838
|
+
name: "network-access"
|
|
98839
|
+
},
|
|
98840
|
+
{
|
|
98841
|
+
key: "networkLink",
|
|
98842
|
+
name: "network-link"
|
|
98843
|
+
},
|
|
98844
|
+
{
|
|
98845
|
+
key: "networkQuality",
|
|
98846
|
+
name: "network-quality"
|
|
98847
|
+
},
|
|
98848
|
+
{
|
|
98849
|
+
key: "nodeCertificates",
|
|
98850
|
+
name: "node-certificates"
|
|
98851
|
+
},
|
|
98852
|
+
{
|
|
98853
|
+
key: "nodes",
|
|
98854
|
+
name: "nodes"
|
|
98855
|
+
},
|
|
98856
|
+
{
|
|
98857
|
+
key: "notificationOutput",
|
|
98858
|
+
name: "notification-output"
|
|
98859
|
+
},
|
|
98860
|
+
{
|
|
98861
|
+
key: "notificationRules",
|
|
98862
|
+
name: "notification-rules"
|
|
98863
|
+
},
|
|
98864
|
+
{
|
|
98865
|
+
key: "notifier",
|
|
98866
|
+
name: "notifier"
|
|
98867
|
+
},
|
|
98868
|
+
{
|
|
98869
|
+
key: "numericSensor",
|
|
98870
|
+
name: "numeric-sensor"
|
|
98871
|
+
},
|
|
98872
|
+
{
|
|
98873
|
+
key: "oauthIntegration",
|
|
98874
|
+
name: "oauth-integration"
|
|
98875
|
+
},
|
|
98876
|
+
{
|
|
98877
|
+
key: "oidcConnections",
|
|
98878
|
+
name: "oidc-connections"
|
|
98879
|
+
},
|
|
98880
|
+
{
|
|
98881
|
+
key: "osd",
|
|
98882
|
+
name: "osd"
|
|
98883
|
+
},
|
|
98884
|
+
{
|
|
98885
|
+
key: "osdManager",
|
|
98886
|
+
name: "osd-manager"
|
|
98887
|
+
},
|
|
98888
|
+
{
|
|
98889
|
+
key: "petFeeder",
|
|
98890
|
+
name: "pet-feeder"
|
|
98891
|
+
},
|
|
98892
|
+
{
|
|
98893
|
+
key: "pipelineAnalytics",
|
|
98894
|
+
name: "pipeline-analytics"
|
|
98895
|
+
},
|
|
98896
|
+
{
|
|
98897
|
+
key: "pipelineExecutor",
|
|
98898
|
+
name: "pipeline-executor"
|
|
98899
|
+
},
|
|
98900
|
+
{
|
|
98901
|
+
key: "pipelineOrchestrator",
|
|
98902
|
+
name: "pipeline-orchestrator"
|
|
98903
|
+
},
|
|
98904
|
+
{
|
|
98905
|
+
key: "pipelineRunner",
|
|
98906
|
+
name: "pipeline-runner"
|
|
98907
|
+
},
|
|
98908
|
+
{
|
|
98909
|
+
key: "plateGallery",
|
|
98910
|
+
name: "plate-gallery"
|
|
98911
|
+
},
|
|
98912
|
+
{
|
|
98913
|
+
key: "platformProbe",
|
|
98914
|
+
name: "platform-probe"
|
|
98915
|
+
},
|
|
98916
|
+
{
|
|
98917
|
+
key: "powerMeter",
|
|
98918
|
+
name: "power-meter"
|
|
98919
|
+
},
|
|
98920
|
+
{
|
|
98921
|
+
key: "presence",
|
|
98922
|
+
name: "presence"
|
|
98923
|
+
},
|
|
98924
|
+
{
|
|
98925
|
+
key: "pressureSensor",
|
|
98926
|
+
name: "pressure-sensor"
|
|
98927
|
+
},
|
|
98928
|
+
{
|
|
98929
|
+
key: "privacyMask",
|
|
98930
|
+
name: "privacy-mask"
|
|
98931
|
+
},
|
|
98932
|
+
{
|
|
98933
|
+
key: "ptz",
|
|
98934
|
+
name: "ptz"
|
|
98935
|
+
},
|
|
98936
|
+
{
|
|
98937
|
+
key: "ptzAutotrack",
|
|
98938
|
+
name: "ptz-autotrack"
|
|
98939
|
+
},
|
|
98940
|
+
{
|
|
98941
|
+
key: "reboot",
|
|
98942
|
+
name: "reboot"
|
|
98943
|
+
},
|
|
98944
|
+
{
|
|
98945
|
+
key: "recordEntries",
|
|
98946
|
+
name: "record-entries"
|
|
98947
|
+
},
|
|
98948
|
+
{
|
|
98949
|
+
key: "recording",
|
|
98950
|
+
name: "recording"
|
|
98951
|
+
},
|
|
98952
|
+
{
|
|
98953
|
+
key: "recordingArchive",
|
|
98954
|
+
name: "recording-archive"
|
|
98955
|
+
},
|
|
98956
|
+
{
|
|
98957
|
+
key: "recordingExport",
|
|
98958
|
+
name: "recording-export"
|
|
98959
|
+
},
|
|
98960
|
+
{
|
|
98961
|
+
key: "recordingOnboard",
|
|
98962
|
+
name: "recording-onboard"
|
|
98963
|
+
},
|
|
98964
|
+
{
|
|
98965
|
+
key: "recordingSignal",
|
|
98966
|
+
name: "recording-signal"
|
|
98967
|
+
},
|
|
98968
|
+
{
|
|
98969
|
+
key: "records",
|
|
98970
|
+
name: "records"
|
|
98971
|
+
},
|
|
98972
|
+
{
|
|
98973
|
+
key: "runningState",
|
|
98974
|
+
name: "running-state"
|
|
98975
|
+
},
|
|
98976
|
+
{
|
|
98977
|
+
key: "sceneMonitor",
|
|
98978
|
+
name: "scene-monitor"
|
|
98979
|
+
},
|
|
98980
|
+
{
|
|
98981
|
+
key: "scriptRunner",
|
|
98982
|
+
name: "script-runner"
|
|
98983
|
+
},
|
|
98984
|
+
{
|
|
98985
|
+
key: "serverManagement",
|
|
98986
|
+
name: "server-management"
|
|
98987
|
+
},
|
|
98988
|
+
{
|
|
98989
|
+
key: "settingsStore",
|
|
98990
|
+
name: "settings-store"
|
|
98991
|
+
},
|
|
98992
|
+
{
|
|
98993
|
+
key: "smoke",
|
|
98994
|
+
name: "smoke"
|
|
98995
|
+
},
|
|
98996
|
+
{
|
|
98997
|
+
key: "smtpProvider",
|
|
98998
|
+
name: "smtp-provider"
|
|
98999
|
+
},
|
|
99000
|
+
{
|
|
99001
|
+
key: "snapshot",
|
|
99002
|
+
name: "snapshot"
|
|
99003
|
+
},
|
|
99004
|
+
{
|
|
99005
|
+
key: "ssoBridge",
|
|
99006
|
+
name: "sso-bridge"
|
|
99007
|
+
},
|
|
99008
|
+
{
|
|
99009
|
+
key: "storage",
|
|
99010
|
+
name: "storage"
|
|
99011
|
+
},
|
|
99012
|
+
{
|
|
99013
|
+
key: "storageAdmin",
|
|
99014
|
+
name: "storage-admin"
|
|
99015
|
+
},
|
|
99016
|
+
{
|
|
99017
|
+
key: "storageEvictable",
|
|
99018
|
+
name: "storage-evictable"
|
|
99019
|
+
},
|
|
99020
|
+
{
|
|
99021
|
+
key: "storageMigration",
|
|
99022
|
+
name: "storage-migration"
|
|
99023
|
+
},
|
|
99024
|
+
{
|
|
99025
|
+
key: "storageOccupancy",
|
|
99026
|
+
name: "storage-occupancy"
|
|
99027
|
+
},
|
|
99028
|
+
{
|
|
99029
|
+
key: "storageProvider",
|
|
99030
|
+
name: "storage-provider"
|
|
99031
|
+
},
|
|
99032
|
+
{
|
|
99033
|
+
key: "streamBroker",
|
|
99034
|
+
name: "stream-broker"
|
|
99035
|
+
},
|
|
99036
|
+
{
|
|
99037
|
+
key: "streamCatalog",
|
|
99038
|
+
name: "stream-catalog"
|
|
99039
|
+
},
|
|
99040
|
+
{
|
|
99041
|
+
key: "streamParams",
|
|
99042
|
+
name: "stream-params"
|
|
99043
|
+
},
|
|
99044
|
+
{
|
|
99045
|
+
key: "streamSignals",
|
|
99046
|
+
name: "stream-signals"
|
|
99047
|
+
},
|
|
99048
|
+
{
|
|
99049
|
+
key: "switch",
|
|
99050
|
+
name: "switch"
|
|
99051
|
+
},
|
|
99052
|
+
{
|
|
99053
|
+
key: "system",
|
|
99054
|
+
name: "system"
|
|
99055
|
+
},
|
|
99056
|
+
{
|
|
99057
|
+
key: "tamper",
|
|
99058
|
+
name: "tamper"
|
|
99059
|
+
},
|
|
99060
|
+
{
|
|
99061
|
+
key: "temperatureSensor",
|
|
99062
|
+
name: "temperature-sensor"
|
|
99063
|
+
},
|
|
99064
|
+
{
|
|
99065
|
+
key: "terminalSession",
|
|
99066
|
+
name: "terminal-session"
|
|
99067
|
+
},
|
|
99068
|
+
{
|
|
99069
|
+
key: "toast",
|
|
99070
|
+
name: "toast"
|
|
99071
|
+
},
|
|
99072
|
+
{
|
|
99073
|
+
key: "training",
|
|
99074
|
+
name: "training"
|
|
99075
|
+
},
|
|
99076
|
+
{
|
|
99077
|
+
key: "trainingProvider",
|
|
99078
|
+
name: "training-provider"
|
|
99079
|
+
},
|
|
99080
|
+
{
|
|
99081
|
+
key: "turnProvider",
|
|
99082
|
+
name: "turn-provider"
|
|
99083
|
+
},
|
|
99084
|
+
{
|
|
99085
|
+
key: "update",
|
|
99086
|
+
name: "update"
|
|
99087
|
+
},
|
|
99088
|
+
{
|
|
99089
|
+
key: "userManagement",
|
|
99090
|
+
name: "user-management"
|
|
99091
|
+
},
|
|
99092
|
+
{
|
|
99093
|
+
key: "userPasskeys",
|
|
99094
|
+
name: "user-passkeys"
|
|
99095
|
+
},
|
|
99096
|
+
{
|
|
99097
|
+
key: "vacuumControl",
|
|
99098
|
+
name: "vacuum-control"
|
|
99099
|
+
},
|
|
99100
|
+
{
|
|
99101
|
+
key: "valve",
|
|
99102
|
+
name: "valve"
|
|
99103
|
+
},
|
|
99104
|
+
{
|
|
99105
|
+
key: "vectorStore",
|
|
99106
|
+
name: "vector-store"
|
|
99107
|
+
},
|
|
99108
|
+
{
|
|
99109
|
+
key: "vibration",
|
|
99110
|
+
name: "vibration"
|
|
99111
|
+
},
|
|
99112
|
+
{
|
|
99113
|
+
key: "videoclips",
|
|
99114
|
+
name: "videoclips"
|
|
99115
|
+
},
|
|
99116
|
+
{
|
|
99117
|
+
key: "viewerUi",
|
|
99118
|
+
name: "viewer-ui"
|
|
99119
|
+
},
|
|
99120
|
+
{
|
|
99121
|
+
key: "waterHeater",
|
|
99122
|
+
name: "water-heater"
|
|
99123
|
+
},
|
|
99124
|
+
{
|
|
99125
|
+
key: "weather",
|
|
99126
|
+
name: "weather"
|
|
99127
|
+
},
|
|
99128
|
+
{
|
|
99129
|
+
key: "webrtcSession",
|
|
99130
|
+
name: "webrtc-session"
|
|
99131
|
+
},
|
|
99132
|
+
{
|
|
99133
|
+
key: "zoneAnalytics",
|
|
99134
|
+
name: "zone-analytics"
|
|
99135
|
+
},
|
|
99136
|
+
{
|
|
99137
|
+
key: "zoneRules",
|
|
99138
|
+
name: "zone-rules"
|
|
99139
|
+
},
|
|
99140
|
+
{
|
|
99141
|
+
key: "zones",
|
|
99142
|
+
name: "zones"
|
|
99143
|
+
}
|
|
99144
|
+
];
|
|
99255
99145
|
/**
|
|
99256
|
-
*
|
|
99257
|
-
*
|
|
99258
|
-
*
|
|
99146
|
+
* Every CapabilityDefinition shipped by `@camstack/types`. The hub
|
|
99147
|
+
* iterates this array at boot to declare each cap on the registry
|
|
99148
|
+
* before addons (in-process or via the Moleculer bridge) attempt
|
|
99149
|
+
* `registerProvider`. Adding a new cap means dropping a `*.cap.ts`
|
|
99150
|
+
* file in `packages/types/src/capabilities/` and re-running
|
|
99151
|
+
* `npx tsx scripts/generate-capability-router-types.ts` — no manual
|
|
99152
|
+
* edit to `main.ts` required.
|
|
99259
99153
|
*/
|
|
99260
|
-
var
|
|
99261
|
-
|
|
99262
|
-
|
|
99263
|
-
|
|
99264
|
-
|
|
99265
|
-
|
|
99266
|
-
|
|
99267
|
-
|
|
99268
|
-
|
|
99269
|
-
|
|
99270
|
-
|
|
99271
|
-
|
|
99272
|
-
|
|
99273
|
-
|
|
99274
|
-
|
|
99275
|
-
|
|
99276
|
-
|
|
99277
|
-
|
|
99278
|
-
|
|
99279
|
-
|
|
99280
|
-
|
|
99281
|
-
|
|
99282
|
-
|
|
99283
|
-
|
|
99284
|
-
|
|
99285
|
-
|
|
99286
|
-
|
|
99287
|
-
|
|
99288
|
-
|
|
99289
|
-
|
|
99290
|
-
|
|
99291
|
-
|
|
99292
|
-
|
|
99293
|
-
|
|
99294
|
-
|
|
99295
|
-
|
|
99296
|
-
|
|
99297
|
-
|
|
99298
|
-
|
|
99299
|
-
|
|
99300
|
-
|
|
99301
|
-
|
|
99302
|
-
|
|
99303
|
-
|
|
99304
|
-
|
|
99305
|
-
|
|
99306
|
-
|
|
99307
|
-
|
|
99308
|
-
|
|
99309
|
-
|
|
99310
|
-
|
|
99311
|
-
|
|
99312
|
-
|
|
99313
|
-
|
|
99314
|
-
|
|
99315
|
-
|
|
99316
|
-
|
|
99317
|
-
|
|
99318
|
-
|
|
99319
|
-
|
|
99320
|
-
|
|
99321
|
-
|
|
99322
|
-
|
|
99323
|
-
|
|
99324
|
-
|
|
99325
|
-
|
|
99326
|
-
|
|
99327
|
-
|
|
99328
|
-
|
|
99329
|
-
|
|
99330
|
-
|
|
99331
|
-
|
|
99332
|
-
|
|
99333
|
-
|
|
99334
|
-
|
|
99335
|
-
|
|
99154
|
+
var ALL_CAPABILITY_DEFINITIONS = [
|
|
99155
|
+
accessoriesCapability,
|
|
99156
|
+
addonPagesCapability,
|
|
99157
|
+
addonPagesSourceCapability,
|
|
99158
|
+
addonRoutesCapability,
|
|
99159
|
+
addonSettingsCapability,
|
|
99160
|
+
addonWidgetsCapability,
|
|
99161
|
+
addonWidgetsSourceCapability,
|
|
99162
|
+
addonsCapability,
|
|
99163
|
+
require_sleep.adminUiCapability,
|
|
99164
|
+
airQualitySensorCapability,
|
|
99165
|
+
alarmPanelCapability,
|
|
99166
|
+
alertsCapability,
|
|
99167
|
+
ambientLightSensorCapability,
|
|
99168
|
+
audioAnalysisCapability,
|
|
99169
|
+
audioAnalyzerCapability,
|
|
99170
|
+
audioCodecCapability,
|
|
99171
|
+
audioMetricsCapability,
|
|
99172
|
+
authProviderCapability,
|
|
99173
|
+
automationControlCapability,
|
|
99174
|
+
backupCapability,
|
|
99175
|
+
batteryCapability,
|
|
99176
|
+
binaryCapability,
|
|
99177
|
+
brightnessCapability,
|
|
99178
|
+
brokerCapability,
|
|
99179
|
+
buttonCapability,
|
|
99180
|
+
calendarSourceCapability,
|
|
99181
|
+
calendarsCapability,
|
|
99182
|
+
cameraCredentialsCapability,
|
|
99183
|
+
cameraGridLayoutCapability,
|
|
99184
|
+
cameraPipelineConfigCapability,
|
|
99185
|
+
cameraStreamsCapability,
|
|
99186
|
+
carbonMonoxideCapability,
|
|
99187
|
+
climateControlCapability,
|
|
99188
|
+
colorCapability,
|
|
99189
|
+
composerCapability,
|
|
99190
|
+
connectionTestCapability,
|
|
99191
|
+
connectivityCapability,
|
|
99192
|
+
consumablesCapability,
|
|
99193
|
+
contactCapability,
|
|
99194
|
+
controlCapability,
|
|
99195
|
+
coreBlocksCapability,
|
|
99196
|
+
coverCapability,
|
|
99197
|
+
customModelRegistryCapability,
|
|
99198
|
+
dataStoreProviderCapability,
|
|
99199
|
+
databaseSnapshotCapability,
|
|
99200
|
+
dayNightCapability,
|
|
99201
|
+
decoderCapability,
|
|
99202
|
+
detectionPipelineCapability,
|
|
99203
|
+
deviceAdminLinkCapability,
|
|
99204
|
+
deviceAdoptionCapability,
|
|
99205
|
+
deviceCredentialsCapability,
|
|
99206
|
+
deviceDiscoveryCapability,
|
|
99207
|
+
deviceExportCapability,
|
|
99208
|
+
deviceExtensionCapability,
|
|
99209
|
+
deviceHistoryCapability,
|
|
99210
|
+
deviceManagerCapability,
|
|
99211
|
+
require_sleep.deviceOpsCapability,
|
|
99212
|
+
deviceProviderCapability,
|
|
99213
|
+
deviceRemovalHookCapability,
|
|
99214
|
+
deviceStateCapability,
|
|
99215
|
+
deviceStatusCapability,
|
|
99216
|
+
dishwasherCapability,
|
|
99217
|
+
displayPaletteCapability,
|
|
99218
|
+
doorbellCapability,
|
|
99219
|
+
embeddingEncoderCapability,
|
|
99220
|
+
enumSensorCapability,
|
|
99221
|
+
eventEmitterCapability,
|
|
99222
|
+
faceGalleryCapability,
|
|
99223
|
+
failureContributionCapability,
|
|
99224
|
+
fanControlCapability,
|
|
99225
|
+
featureProbeCapability,
|
|
99226
|
+
filesystemBrowseCapability,
|
|
99227
|
+
floodCapability,
|
|
99228
|
+
gasCapability,
|
|
99229
|
+
heatingValveCapability,
|
|
99230
|
+
humidifierCapability,
|
|
99231
|
+
humiditySensorCapability,
|
|
99232
|
+
imageCapability,
|
|
99233
|
+
imageSettingsCapability,
|
|
99234
|
+
integrationsCapability,
|
|
99235
|
+
intercomCapability,
|
|
99236
|
+
keychainCapability,
|
|
99237
|
+
keychainAdminCapability,
|
|
99238
|
+
lawnMowerControlCapability,
|
|
99239
|
+
llmCapability,
|
|
99240
|
+
llmRuntimeCapability,
|
|
99241
|
+
loadContributionCapability,
|
|
99242
|
+
localNetworkCapability,
|
|
99243
|
+
lockControlCapability,
|
|
99244
|
+
logChannelsCapability,
|
|
99245
|
+
logDestinationCapability,
|
|
99246
|
+
loginMethodCapability,
|
|
99247
|
+
mediaPlayerCapability,
|
|
99248
|
+
meshNetworkCapability,
|
|
99249
|
+
metricsProviderCapability,
|
|
99250
|
+
modelConvertCapability,
|
|
99251
|
+
modelDistributorCapability,
|
|
99252
|
+
motionCapability,
|
|
99253
|
+
motionDetectionCapability,
|
|
99254
|
+
motionTriggerCapability,
|
|
99255
|
+
motionZonesCapability,
|
|
99256
|
+
mqttBrokerCapability,
|
|
99257
|
+
nativeObjectDetectionCapability,
|
|
99258
|
+
navigationCapability,
|
|
99259
|
+
networkAccessCapability,
|
|
99260
|
+
networkLinkCapability,
|
|
99261
|
+
networkQualityCapability,
|
|
99262
|
+
nodeCertificatesCapability,
|
|
99263
|
+
nodesCapability,
|
|
99264
|
+
notificationOutputCapability,
|
|
99265
|
+
notificationRulesCapability,
|
|
99266
|
+
notifierCapability,
|
|
99267
|
+
numericSensorCapability,
|
|
99268
|
+
oauthIntegrationCapability,
|
|
99269
|
+
oidcConnectionsCapability,
|
|
99270
|
+
osdCapability,
|
|
99271
|
+
osdManagerCapability,
|
|
99272
|
+
petFeederCapability,
|
|
99273
|
+
pipelineAnalyticsCapability,
|
|
99274
|
+
pipelineExecutorCapability,
|
|
99275
|
+
pipelineOrchestratorCapability,
|
|
99276
|
+
pipelineRunnerCapability,
|
|
99277
|
+
plateGalleryCapability,
|
|
99278
|
+
platformProbeCapability,
|
|
99279
|
+
powerMeterCapability,
|
|
99280
|
+
presenceCapability,
|
|
99281
|
+
pressureSensorCapability,
|
|
99282
|
+
privacyMaskCapability,
|
|
99283
|
+
ptzCapability,
|
|
99284
|
+
ptzAutotrackCapability,
|
|
99285
|
+
rebootCapability,
|
|
99286
|
+
recordEntriesCapability,
|
|
99287
|
+
recordingCapability,
|
|
99288
|
+
recordingArchiveCapability,
|
|
99289
|
+
recordingExportCapability,
|
|
99290
|
+
recordingOnboardCapability,
|
|
99291
|
+
recordingSignalCapability,
|
|
99292
|
+
recordsCapability,
|
|
99293
|
+
runningStateCapability,
|
|
99294
|
+
sceneMonitorCapability,
|
|
99295
|
+
scriptRunnerCapability,
|
|
99296
|
+
serverManagementCapability,
|
|
99297
|
+
settingsStoreCapability,
|
|
99298
|
+
smokeCapability,
|
|
99299
|
+
smtpProviderCapability,
|
|
99300
|
+
snapshotCapability,
|
|
99301
|
+
ssoBridgeCapability,
|
|
99302
|
+
storageCapability,
|
|
99303
|
+
storageAdminCapability,
|
|
99304
|
+
storageEvictableCapability,
|
|
99305
|
+
storageMigrationCapability,
|
|
99306
|
+
storageOccupancyCapability,
|
|
99307
|
+
storageProviderCapability,
|
|
99308
|
+
streamBrokerCapability,
|
|
99309
|
+
streamCatalogCapability,
|
|
99310
|
+
streamParamsCapability,
|
|
99311
|
+
streamSignalsCapability,
|
|
99312
|
+
switchCapability,
|
|
99313
|
+
systemCapability,
|
|
99314
|
+
tamperCapability,
|
|
99315
|
+
temperatureSensorCapability,
|
|
99316
|
+
terminalSessionCapability,
|
|
99317
|
+
toastCapability,
|
|
99318
|
+
trainingCapability,
|
|
99319
|
+
trainingProviderCapability,
|
|
99320
|
+
turnProviderCapability,
|
|
99321
|
+
updateCapability,
|
|
99322
|
+
userManagementCapability,
|
|
99323
|
+
userPasskeysCapability,
|
|
99324
|
+
vacuumControlCapability,
|
|
99325
|
+
valveCapability,
|
|
99326
|
+
vectorStoreCapability,
|
|
99327
|
+
vibrationCapability,
|
|
99328
|
+
videoclipsCapability,
|
|
99329
|
+
require_sleep.viewerUiCapability,
|
|
99330
|
+
waterHeaterCapability,
|
|
99331
|
+
weatherCapability,
|
|
99332
|
+
webrtcSessionCapability,
|
|
99333
|
+
zoneAnalyticsCapability,
|
|
99334
|
+
zoneRulesCapability,
|
|
99335
|
+
zonesCapability
|
|
99336
99336
|
];
|
|
99337
99337
|
//#endregion
|
|
99338
99338
|
//#region src/generated/method-device-selectors.ts
|
|
@@ -104909,7 +104909,7 @@ var LABEL_CONDITION_IDS = new Set(["sensorKinds"]);
|
|
|
104909
104909
|
* maps COCO onto the macro and drops the rest). A sub-type therefore names a key
|
|
104910
104910
|
* that does not exist — the counter is 0 forever and the rule cannot fire.
|
|
104911
104911
|
*
|
|
104912
|
-
* Live cost, 2026-08-12: two rules on device
|
|
104912
|
+
* Live cost, 2026-08-12: two rules on device 102 were authored with `car`
|
|
104913
104913
|
* because this picker offered the whole taxonomy. They were silent for a day.
|
|
104914
104914
|
*/
|
|
104915
104915
|
var COUNT_CLASS_CONDITION_IDS = new Set(["occupancy"]);
|
|
@@ -107421,7 +107421,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
107421
107421
|
{
|
|
107422
107422
|
name: "summaryStreams",
|
|
107423
107423
|
label: "Summary: streams offline",
|
|
107424
|
-
example: "
|
|
107424
|
+
example: "Front door (high) — since 06:40",
|
|
107425
107425
|
kinds: ["stream-offline", "stream-online"]
|
|
107426
107426
|
},
|
|
107427
107427
|
{
|
|
@@ -107439,13 +107439,13 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
107439
107439
|
{
|
|
107440
107440
|
name: "summaryDetection",
|
|
107441
107441
|
label: "Summary: cameras detecting nothing",
|
|
107442
|
-
example: "
|
|
107442
|
+
example: "Front door — since 05:10",
|
|
107443
107443
|
kinds: ["detection-blind"]
|
|
107444
107444
|
},
|
|
107445
107445
|
{
|
|
107446
107446
|
name: "summaryNodes",
|
|
107447
107447
|
label: "Summary: nodes",
|
|
107448
|
-
example: "
|
|
107448
|
+
example: "agent-a — offline since 03:00",
|
|
107449
107449
|
kinds: [
|
|
107450
107450
|
"node-offline",
|
|
107451
107451
|
"node-online",
|
|
@@ -107529,7 +107529,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107529
107529
|
{
|
|
107530
107530
|
name: "camera",
|
|
107531
107531
|
label: "Camera",
|
|
107532
|
-
example: "
|
|
107532
|
+
example: "Front door",
|
|
107533
107533
|
group: "subject",
|
|
107534
107534
|
families: ["rule", "timelapse"],
|
|
107535
107535
|
systemEventKinds: [...DEVICE_EVENTS, "export-completed"]
|
|
@@ -107697,7 +107697,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107697
107697
|
{
|
|
107698
107698
|
name: "rule",
|
|
107699
107699
|
label: "Rule name",
|
|
107700
|
-
example: "
|
|
107700
|
+
example: "Front door notte",
|
|
107701
107701
|
group: "rule",
|
|
107702
107702
|
families: [
|
|
107703
107703
|
"rule",
|
|
@@ -107798,7 +107798,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107798
107798
|
{
|
|
107799
107799
|
name: "deviceName",
|
|
107800
107800
|
label: "Device",
|
|
107801
|
-
example: "
|
|
107801
|
+
example: "Front door",
|
|
107802
107802
|
group: "system",
|
|
107803
107803
|
families: ["rule"],
|
|
107804
107804
|
fields: [...RULE_TEXT],
|
|
@@ -107808,7 +107808,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107808
107808
|
{
|
|
107809
107809
|
name: "locations",
|
|
107810
107810
|
label: "Intrusion locations",
|
|
107811
|
-
example: "
|
|
107811
|
+
example: "Front door, Hallway, Hall",
|
|
107812
107812
|
group: "system",
|
|
107813
107813
|
families: ["rule"],
|
|
107814
107814
|
fields: [...RULE_TEXT],
|
|
@@ -107818,7 +107818,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107818
107818
|
{
|
|
107819
107819
|
name: "deviceId",
|
|
107820
107820
|
label: "Device id",
|
|
107821
|
-
example: "
|
|
107821
|
+
example: "102",
|
|
107822
107822
|
group: "system",
|
|
107823
107823
|
families: ["rule"],
|
|
107824
107824
|
fields: [...RULE_TEXT],
|
|
@@ -107906,7 +107906,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107906
107906
|
{
|
|
107907
107907
|
name: "nodeName",
|
|
107908
107908
|
label: "Node name",
|
|
107909
|
-
example: "
|
|
107909
|
+
example: "agent-a",
|
|
107910
107910
|
group: "system",
|
|
107911
107911
|
families: ["rule"],
|
|
107912
107912
|
fields: [...RULE_TEXT],
|
|
@@ -107927,7 +107927,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
107927
107927
|
name: "devices",
|
|
107928
107928
|
label: "Devices",
|
|
107929
107929
|
description: "node-inference-unavailable: the affected cameras, comma-joined. Alarm arm / arming / refusal: HOW MANY devices are armed (or open).",
|
|
107930
|
-
example: "
|
|
107930
|
+
example: "Front door, Garage",
|
|
107931
107931
|
group: "system",
|
|
107932
107932
|
families: ["rule"],
|
|
107933
107933
|
fields: [...RULE_TEXT],
|
|
@@ -108128,7 +108128,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
108128
108128
|
name: "nodes",
|
|
108129
108129
|
label: "Nodes",
|
|
108130
108130
|
description: "Comma-joined node ids, when an update spans more than one — the single-node case names it through {{nodeId}} instead. `incomingFromUpdateAvailable` (event-intake.ts) fills `nodes` from ONE shared textParams object for both addon- and server-update-available, exactly like packageName/currentVersion/latestVersion/count — only the shipped TEXT (system.server-update-available.body.onNodes) reads it today, but the var is real on both kinds.",
|
|
108131
|
-
example: "hub,
|
|
108131
|
+
example: "hub, agent-a",
|
|
108132
108132
|
group: "system",
|
|
108133
108133
|
families: ["rule"],
|
|
108134
108134
|
fields: [...RULE_TEXT],
|
|
@@ -108239,7 +108239,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
108239
108239
|
{
|
|
108240
108240
|
name: "title",
|
|
108241
108241
|
label: "Export or alert title",
|
|
108242
|
-
example: "
|
|
108242
|
+
example: "Front door 08:00",
|
|
108243
108243
|
group: "system",
|
|
108244
108244
|
families: ["rule"],
|
|
108245
108245
|
fields: [...RULE_TEXT],
|
|
@@ -108353,7 +108353,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
108353
108353
|
name: "names",
|
|
108354
108354
|
label: "Device names",
|
|
108355
108355
|
description: "Armed / arming: the Active devices (or every skipped name when none are Active). Refusal: the open sensors.",
|
|
108356
|
-
example: "
|
|
108356
|
+
example: "Front door, Garage",
|
|
108357
108357
|
group: "system",
|
|
108358
108358
|
families: ["rule"],
|
|
108359
108359
|
fields: [...RULE_TEXT],
|
|
@@ -108401,7 +108401,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
108401
108401
|
name: "bypassedNames",
|
|
108402
108402
|
label: "Bypassed sensors",
|
|
108403
108403
|
description: "Sensors the operator armed around because they were open.",
|
|
108404
|
-
example: "Finestra
|
|
108404
|
+
example: "Finestra porch",
|
|
108405
108405
|
group: "system",
|
|
108406
108406
|
families: ["rule"],
|
|
108407
108407
|
fields: [...RULE_TEXT],
|
|
@@ -109829,7 +109829,7 @@ var TimelapseRuleInputSchema = zod.z.object({
|
|
|
109829
109829
|
* The caption a rule that never set one gets.
|
|
109830
109830
|
*
|
|
109831
109831
|
* Rendered through the ordinary `{{var}}` pass at delivery, so a rule created
|
|
109832
|
-
* before this field existed still reads "Timelapse
|
|
109832
|
+
* before this field existed still reads "Timelapse Camera front door" and
|
|
109833
109833
|
* not the literal braces.
|
|
109834
109834
|
*/
|
|
109835
109835
|
var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{camera}}";
|
|
@@ -111471,7 +111471,7 @@ function classifyRegion(region, uncovered) {
|
|
|
111471
111471
|
* The pass report counts the passes that RAN, so "the second pass stops running
|
|
111472
111472
|
* when a person is beside the dog" — a plausible reading of
|
|
111473
111473
|
* {@link RECOVERY_MAX_REGION_FRAME_FRACTION} and
|
|
111474
|
-
* {@link RECOVERY_MIN_UNCOVERED_FRACTION}, and a live hypothesis on camera
|
|
111474
|
+
* {@link RECOVERY_MIN_UNCOVERED_FRACTION}, and a live hypothesis on camera 101
|
|
111475
111475
|
* — could not be confirmed or killed from the logs at all. This classifies the
|
|
111476
111476
|
* regions a frame offered, against the same predicate the planner filters on.
|
|
111477
111477
|
*/
|
|
@@ -111794,7 +111794,7 @@ function planMotionCropRegions(input) {
|
|
|
111794
111794
|
* — and ceilinged at {@link RECOVERY_CROP_MAX_SIDE_PX}. The ceiling is NOT a
|
|
111795
111795
|
* simplification either: at 1024 px the same 320 model scored the reference
|
|
111796
111796
|
* dog 0.52–0.76, and at 1280 px lost it entirely
|
|
111797
|
-
* (`docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-
|
|
111797
|
+
* (`docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-101`). A
|
|
111798
111798
|
* region longer than the ceiling is TILED along its longer axis, never zoomed
|
|
111799
111799
|
* out.
|
|
111800
111800
|
*/
|
|
@@ -112820,7 +112820,7 @@ function bestLocationMatch(externalName, existing, threshold = .8) {
|
|
|
112820
112820
|
*
|
|
112821
112821
|
* So `entry.providerAddonId === this.ctx.id` is silently, permanently false
|
|
112822
112822
|
* for a builtin — and only for a builtin, which is why it survives a green
|
|
112823
|
-
* suite whose fake supplies the bare id. That is exactly how camera
|
|
112823
|
+
* suite whose fake supplies the bare id. That is exactly how camera 101's
|
|
112824
112824
|
* virtual doorbell (retired since, D671) latched `unbound` for twelve hours on
|
|
112825
112825
|
* 2026-08-07 while its binding was intact ([D72](../../../../docs/decisions/adr-0072.md)).
|
|
112826
112826
|
*
|
|
@@ -114875,10 +114875,6 @@ exports.FEEDER_EXAMPLE_ADDON_ID = FEEDER_EXAMPLE_ADDON_ID;
|
|
|
114875
114875
|
exports.FEEDER_EXAMPLE_HA_DEVICE_ID = FEEDER_EXAMPLE_HA_DEVICE_ID;
|
|
114876
114876
|
exports.FFMPEG_PATH_ENV = require_composition.FFMPEG_PATH_ENV;
|
|
114877
114877
|
exports.FIRST_LEVEL_MACRO_CLASSES = FIRST_LEVEL_MACRO_CLASSES;
|
|
114878
|
-
exports.FRIGATE_PLUS_CLASS_FLOORS = FRIGATE_PLUS_CLASS_FLOORS;
|
|
114879
|
-
exports.FRIGATE_PLUS_TO_MACRO = FRIGATE_PLUS_TO_MACRO;
|
|
114880
|
-
exports.FRIGATE_PLUS_UNMAPPED_LABELS = FRIGATE_PLUS_UNMAPPED_LABELS;
|
|
114881
|
-
exports.FRIGATE_STOCK_CLASS_FLOORS = FRIGATE_STOCK_CLASS_FLOORS;
|
|
114882
114878
|
exports.FULL_IMAGE_BBOX = FULL_IMAGE_BBOX;
|
|
114883
114879
|
exports.FailureContributionSchema = FailureContributionSchema;
|
|
114884
114880
|
exports.FailureCounters = FailureCounters;
|
|
@@ -115519,6 +115515,10 @@ exports.PIPELINE_ANALYTICS_CAP_NAME = PIPELINE_ANALYTICS_CAP_NAME;
|
|
|
115519
115515
|
exports.PIPELINE_FLOW_CAPABILITY_NAMES = PIPELINE_FLOW_CAPABILITY_NAMES;
|
|
115520
115516
|
exports.PIPELINE_OWNER_CAPABILITY_NAMES = PIPELINE_OWNER_CAPABILITY_NAMES;
|
|
115521
115517
|
exports.PIPELINE_RAMP = PIPELINE_RAMP;
|
|
115518
|
+
exports.PLUS_CATALOG_CLASS_FLOORS = PLUS_CATALOG_CLASS_FLOORS;
|
|
115519
|
+
exports.PLUS_CATALOG_STOCK_CLASS_FLOORS = PLUS_CATALOG_STOCK_CLASS_FLOORS;
|
|
115520
|
+
exports.PLUS_CATALOG_TO_MACRO = PLUS_CATALOG_TO_MACRO;
|
|
115521
|
+
exports.PLUS_CATALOG_UNMAPPED_LABELS = PLUS_CATALOG_UNMAPPED_LABELS;
|
|
115522
115522
|
exports.PREFERENCES_MAX_DEVICE_ID_LENGTH = PREFERENCES_MAX_DEVICE_ID_LENGTH;
|
|
115523
115523
|
exports.PREFERENCES_MAX_NAMESPACES = PREFERENCES_MAX_NAMESPACES;
|
|
115524
115524
|
exports.PREFERENCES_MAX_VALUE_BYTES = PREFERENCES_MAX_VALUE_BYTES;
|
|
@@ -116266,10 +116266,10 @@ exports.buildDeviceEnrollmentLink = buildDeviceEnrollmentLink;
|
|
|
116266
116266
|
exports.buildDeviceSignatureMessage = buildDeviceSignatureMessage;
|
|
116267
116267
|
exports.buildEventKindDescriptor = buildEventKindDescriptor;
|
|
116268
116268
|
exports.buildFfmpegArgs = require_composition.buildFfmpegArgs;
|
|
116269
|
-
exports.buildFrigateClassMap = buildFrigateClassMap;
|
|
116270
116269
|
exports.buildInputArgs = require_composition.buildInputArgs;
|
|
116271
116270
|
exports.buildModelVariantGroups = buildModelVariantGroups;
|
|
116272
116271
|
exports.buildNcTaxonomy = buildNcTaxonomy;
|
|
116272
|
+
exports.buildPlusCatalogClassMap = buildPlusCatalogClassMap;
|
|
116273
116273
|
exports.buildRoleScopes = buildRoleScopes;
|
|
116274
116274
|
exports.buildSecretRef = require_sleep.buildSecretRef;
|
|
116275
116275
|
exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
|
|
@@ -116558,8 +116558,6 @@ exports.formatParkedFor = formatParkedFor;
|
|
|
116558
116558
|
exports.formatSecretScope = require_sleep.formatSecretScope;
|
|
116559
116559
|
exports.formulaProblem = formulaProblem;
|
|
116560
116560
|
exports.freshResults = freshResults;
|
|
116561
|
-
exports.frigateDefaultClassFloors = frigateDefaultClassFloors;
|
|
116562
|
-
exports.frigateLabelFields = frigateLabelFields;
|
|
116563
116561
|
exports.fuseRecoveredDetections = fuseRecoveredDetections;
|
|
116564
116562
|
exports.gasCapability = gasCapability;
|
|
116565
116563
|
exports.gbToBytes = gbToBytes;
|
|
@@ -116856,6 +116854,8 @@ exports.planMotionCrops = planMotionCrops;
|
|
|
116856
116854
|
exports.planRecoveryCrops = planRecoveryCrops;
|
|
116857
116855
|
exports.plateGalleryCapability = plateGalleryCapability;
|
|
116858
116856
|
exports.platformProbeCapability = platformProbeCapability;
|
|
116857
|
+
exports.plusCatalogDefaultClassFloors = plusCatalogDefaultClassFloors;
|
|
116858
|
+
exports.plusCatalogLabelFields = plusCatalogLabelFields;
|
|
116859
116859
|
exports.poolMemoryThreshold = poolMemoryThreshold;
|
|
116860
116860
|
exports.powerMeterCapability = powerMeterCapability;
|
|
116861
116861
|
exports.prepareNotification = prepareNotification;
|