@camstack/addon-post-analysis 1.2.118 → 1.2.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dist-Gn2fFMov.mjs → dist-CsMG-R4E.mjs} +76 -22
- package/dist/{dist-CO6pe7bi.js → dist-jHCxxZ2_.js} +76 -22
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BYzwylnw.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-u9dpdQPa.mjs} +3 -3
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Kj0oid5Z.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-TlKH3NQ8.mjs → hostInit-nR5c9hhI.mjs} +3 -3
- package/dist/pipeline-analytics/index.js +261 -15
- package/dist/pipeline-analytics/index.mjs +261 -15
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DlTk9-4b.mjs +0 -26
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as customAction, A as NcTaxonomySchema, At as sleep, B as TIMELAPSE_DENSE_FLOOR_SEC, Bt as string, C as NcRuleSchema, Ct as errMsg, D as NcSnoozeSchema, Dt as hydrateSchema, E as NcSnoozeInputSchema, Et as createEvent, Ft as literal, G as VISIT_MERGE_GAP_MS, H as TimelapseRulePatchSchema, Ht as EventCategory, I as SCENE_DEFAULT_ANCHOR_THRESHOLD, It as number, J as assertTimelapseCadences, K as addonWidgetsSourceCapability, L as SCENE_DEFAULT_UNCOVERED_POLICY, Lt as object, Mt as array, N as RECORDING_EXPORT_MAX_READ_BYTES, Nt as boolean, O as NcSnoozeSuppressedSchema, Ot as isDeviceScopedCap, P as RetrainStatusSchema, Pt as discriminatedUnion, Q as cosineSimilarity$1, R as SCENE_DIVERGED, Rt as partialRecord, S as NcRulePatchSchema, St as zoneAnalyticsCapability, T as NcScheduleSchema, Tt as DeviceType, U as TimelapseRuleSchema, V as TimelapseRuleInputSchema, Vt as unknown, W as TrackSourceSchema, X as audioModeOf, Y as audioMetricsCapability, Z as buildEventKindDescriptor, _ as NC_DEFAULT_SNOOZE_MINUTES, _t as sceneMonitorCapability, a as DEFAULT_EVENT_COLOR, b as NcConditionDescriptorSchema, bt as vectorDimFromBase64, ct as kebabToCamel, d as EVENT_PAD_MS, dt as pickClusterStepModels, et as defineCustomActions, f as FULL_IMAGE_BBOX, ft as pipelineAnalyticsCapability, g as NC_CONDITION_CATALOG, h as NC_ALARM_SYSTEM_EVENT_KINDS, ht as readTimelapseGeneratedAt, i as CLUSTER_MODEL_SCOPED_STEPS, it as faceGalleryCapability, j as OpsLogEntrySchema, jt as _enum, k as NcSystemEventKindSchema, kt as nodePin, l as DeclaredDevices, lt as notificationRulesCapability, m as MACRO_LABELS, mt as readDeviceStateFrom, n as AnalyticsGroupRecordSchema, ot as isDetectionMacroClass, p as LabelAttributionSchema, pt as plateGalleryCapability, q as alarmPanelCapability, r as BaseDevice, rt as encodeVectorBase64, s as DETECTION_MACRO_CLASSES, st as isScheduleActive, t as AnalyticsGroupDetailSchema, tt as deriveRecordingMode, u as EVENT_KIND_BY_CAP, vt as subKindsOf, w as NcRuleTargetSchema, wt as BaseAddon, x as NcRuleInputSchema, xt as videoclipsCapability, y as NC_TAXONOMY, yt as systemEventFilterApplies, z as SceneMonitorSchema, zt as record } from "../dist-
|
|
1
|
+
import { $ as customAction, A as NcTaxonomySchema, At as sleep, B as TIMELAPSE_DENSE_FLOOR_SEC, Bt as string, C as NcRuleSchema, Ct as errMsg, D as NcSnoozeSchema, Dt as hydrateSchema, E as NcSnoozeInputSchema, Et as createEvent, Ft as literal, G as VISIT_MERGE_GAP_MS, H as TimelapseRulePatchSchema, Ht as EventCategory, I as SCENE_DEFAULT_ANCHOR_THRESHOLD, It as number, J as assertTimelapseCadences, K as addonWidgetsSourceCapability, L as SCENE_DEFAULT_UNCOVERED_POLICY, Lt as object, Mt as array, N as RECORDING_EXPORT_MAX_READ_BYTES, Nt as boolean, O as NcSnoozeSuppressedSchema, Ot as isDeviceScopedCap, P as RetrainStatusSchema, Pt as discriminatedUnion, Q as cosineSimilarity$1, R as SCENE_DIVERGED, Rt as partialRecord, S as NcRulePatchSchema, St as zoneAnalyticsCapability, T as NcScheduleSchema, Tt as DeviceType, U as TimelapseRuleSchema, V as TimelapseRuleInputSchema, Vt as unknown, W as TrackSourceSchema, X as audioModeOf, Y as audioMetricsCapability, Z as buildEventKindDescriptor, _ as NC_DEFAULT_SNOOZE_MINUTES, _t as sceneMonitorCapability, a as DEFAULT_EVENT_COLOR, b as NcConditionDescriptorSchema, bt as vectorDimFromBase64, ct as kebabToCamel, d as EVENT_PAD_MS, dt as pickClusterStepModels, et as defineCustomActions, f as FULL_IMAGE_BBOX, ft as pipelineAnalyticsCapability, g as NC_CONDITION_CATALOG, h as NC_ALARM_SYSTEM_EVENT_KINDS, ht as readTimelapseGeneratedAt, i as CLUSTER_MODEL_SCOPED_STEPS, it as faceGalleryCapability, j as OpsLogEntrySchema, jt as _enum, k as NcSystemEventKindSchema, kt as nodePin, l as DeclaredDevices, lt as notificationRulesCapability, m as MACRO_LABELS, mt as readDeviceStateFrom, n as AnalyticsGroupRecordSchema, ot as isDetectionMacroClass, p as LabelAttributionSchema, pt as plateGalleryCapability, q as alarmPanelCapability, r as BaseDevice, rt as encodeVectorBase64, s as DETECTION_MACRO_CLASSES, st as isScheduleActive, t as AnalyticsGroupDetailSchema, tt as deriveRecordingMode, u as EVENT_KIND_BY_CAP, vt as subKindsOf, w as NcRuleTargetSchema, wt as BaseAddon, x as NcRuleInputSchema, xt as videoclipsCapability, y as NC_TAXONOMY, yt as systemEventFilterApplies, z as SceneMonitorSchema, zt as record } from "../dist-CsMG-R4E.mjs";
|
|
2
2
|
import { t as __exportAll } from "../embedding-encoder/index.mjs";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import { promises } from "node:fs";
|
|
@@ -4391,10 +4391,28 @@ var SCENE_LATCH_INDEXES = [{
|
|
|
4391
4391
|
function sceneKey(deviceId, monitorId) {
|
|
4392
4392
|
return `${deviceId}:${monitorId}`;
|
|
4393
4393
|
}
|
|
4394
|
+
/**
|
|
4395
|
+
* Reseed cap for BOTH scene ledgers.
|
|
4396
|
+
*
|
|
4397
|
+
* `DurableLedger` defaults to 100_000 and its own docblock says the owner "sets
|
|
4398
|
+
* it from the row set it expects". Neither scene ledger did, so the 30s
|
|
4399
|
+
* reconcile asked SQLite — through hub-main's event loop, which is the
|
|
4400
|
+
* cluster's only queue (D181) — for up to a hundred thousand rows twice a tick,
|
|
4401
|
+
* on a hub holding one scene and one latch (measured live 2026-08-25). A bound
|
|
4402
|
+
* nobody chose is not a bound.
|
|
4403
|
+
*
|
|
4404
|
+
* A scene is an operator-drawn monitor on ONE camera and a latch is at most one
|
|
4405
|
+
* row per scene, so the row set is `cameras x monitors-per-camera`. 5_000 is
|
|
4406
|
+
* ~5 monitors on each of a thousand cameras — far past any installation this
|
|
4407
|
+
* ships to, and still small enough that a runaway write loop is CAUGHT by the
|
|
4408
|
+
* bound instead of being paged in whole.
|
|
4409
|
+
*/
|
|
4410
|
+
var SCENE_LEDGER_LOAD_LIMIT = 5e3;
|
|
4394
4411
|
var SCENE_CONFIG_SPEC = {
|
|
4395
4412
|
collection: SCENE_COLLECTION,
|
|
4396
4413
|
columns: SCENE_COLUMNS,
|
|
4397
4414
|
indexes: SCENE_INDEXES,
|
|
4415
|
+
loadLimit: SCENE_LEDGER_LOAD_LIMIT,
|
|
4398
4416
|
writeMode: "write-behind",
|
|
4399
4417
|
keyOf: (row) => row.key,
|
|
4400
4418
|
toValue: (row) => ({
|
|
@@ -4410,6 +4428,7 @@ var SCENE_LATCH_SPEC = {
|
|
|
4410
4428
|
collection: SCENE_LATCH_COLLECTION,
|
|
4411
4429
|
columns: SCENE_LATCH_COLUMNS,
|
|
4412
4430
|
indexes: SCENE_LATCH_INDEXES,
|
|
4431
|
+
loadLimit: SCENE_LEDGER_LOAD_LIMIT,
|
|
4413
4432
|
writeMode: "write-through",
|
|
4414
4433
|
keyOf: (row) => row.key,
|
|
4415
4434
|
toValue: (row) => ({
|
|
@@ -4439,6 +4458,9 @@ var SceneStore = class {
|
|
|
4439
4458
|
config;
|
|
4440
4459
|
latch;
|
|
4441
4460
|
logger;
|
|
4461
|
+
/** `scenes/latches` as last announced. Null until the first load, so the
|
|
4462
|
+
* first one always speaks. */
|
|
4463
|
+
lastLoggedCounts = null;
|
|
4442
4464
|
constructor(deps) {
|
|
4443
4465
|
this.logger = deps.logger;
|
|
4444
4466
|
this.config = new DurableLedger({
|
|
@@ -4463,10 +4485,20 @@ var SceneStore = class {
|
|
|
4463
4485
|
* a container recreate, "loaded 0" is the one line that explains why every
|
|
4464
4486
|
* scene suddenly reads `unknown`, and its absence is what turns a data loss
|
|
4465
4487
|
* into a three-hour hunt.
|
|
4488
|
+
*
|
|
4489
|
+
* ON CHANGE ONLY, though — including the first load, where there is nothing
|
|
4490
|
+
* to compare against. This runs on the 30s `SCENE_RELOAD_INTERVAL_MS` tick on
|
|
4491
|
+
* every node, and it used to print unconditionally: measured live 2026-08-25,
|
|
4492
|
+
* `scene state loaded {scenes=1 latches=1}` every 30 seconds forever. A count
|
|
4493
|
+
* reprinted unchanged twice a minute is exactly how the "loaded 0" this line
|
|
4494
|
+
* exists for gets scrolled past.
|
|
4466
4495
|
*/
|
|
4467
4496
|
async load() {
|
|
4468
4497
|
const scenes = await this.config.load();
|
|
4469
4498
|
const latches = await this.latch.load();
|
|
4499
|
+
const counts = `${scenes.length}/${latches.length}`;
|
|
4500
|
+
if (counts === this.lastLoggedCounts) return;
|
|
4501
|
+
this.lastLoggedCounts = counts;
|
|
4470
4502
|
this.logger.info("scene state loaded", { meta: {
|
|
4471
4503
|
scenes: scenes.length,
|
|
4472
4504
|
latches: latches.length
|
|
@@ -8532,6 +8564,49 @@ var NC_LANGUAGES = ["en", "it"];
|
|
|
8532
8564
|
* surface's view all validate against this one, so a third language is added
|
|
8533
8565
|
* to `NC_LANGUAGES` and nowhere else. */
|
|
8534
8566
|
var NcLanguageSchema = _enum(NC_LANGUAGES);
|
|
8567
|
+
/**
|
|
8568
|
+
* Whether two snapshots say the same thing.
|
|
8569
|
+
*
|
|
8570
|
+
* ## Why this is a function and not `===`
|
|
8571
|
+
*
|
|
8572
|
+
* The reload guard in `reloadTexts()` used to be
|
|
8573
|
+
* `before.overrides === next.overrides`, and `next` comes from
|
|
8574
|
+
* `NcTextCatalogStore.load()`, which `parse()`s the row through zod on every
|
|
8575
|
+
* call. The right-hand side is therefore a NEW object on every tick by
|
|
8576
|
+
* construction: the comparison was `false` at byte-identical content, forever.
|
|
8577
|
+
* Measured on the live hub 2026-08-25: 58 "notification texts loaded" lines in
|
|
8578
|
+
* 30 minutes on a hub whose language had not changed, from a line whose own
|
|
8579
|
+
* docblock promises it fires on CHANGE only.
|
|
8580
|
+
*
|
|
8581
|
+
* The document is two levels deep and installation-small (at most one entry per
|
|
8582
|
+
* language, each a flat key→string map), so the comparison is written out
|
|
8583
|
+
* rather than reached for through a deep-equal dependency — and written out it
|
|
8584
|
+
* can state the direction that matters: a REMOVED key must not read as equal,
|
|
8585
|
+
* which a one-directional key walk would get wrong.
|
|
8586
|
+
*/
|
|
8587
|
+
function ncTextSnapshotsEqual(a, b) {
|
|
8588
|
+
if (a.language !== b.language) return false;
|
|
8589
|
+
return overrideMapsEqual(a.overrides, b.overrides);
|
|
8590
|
+
}
|
|
8591
|
+
function overrideMapsEqual(a, b) {
|
|
8592
|
+
const languages = new Set([...Object.keys(a), ...Object.keys(b)]);
|
|
8593
|
+
for (const language of languages) {
|
|
8594
|
+
const left = a[language];
|
|
8595
|
+
const right = b[language];
|
|
8596
|
+
if (left === void 0 || right === void 0) {
|
|
8597
|
+
if (Object.keys(left ?? right ?? {}).length > 0) return false;
|
|
8598
|
+
continue;
|
|
8599
|
+
}
|
|
8600
|
+
if (!flatMapsEqual(left, right)) return false;
|
|
8601
|
+
}
|
|
8602
|
+
return true;
|
|
8603
|
+
}
|
|
8604
|
+
function flatMapsEqual(a, b) {
|
|
8605
|
+
const keys = Object.keys(a);
|
|
8606
|
+
if (keys.length !== Object.keys(b).length) return false;
|
|
8607
|
+
for (const key of keys) if (a[key] !== b[key]) return false;
|
|
8608
|
+
return true;
|
|
8609
|
+
}
|
|
8535
8610
|
/** The shipped files, keyed by language. Data, never mutated. */
|
|
8536
8611
|
var NC_TEXT_BUNDLES = {
|
|
8537
8612
|
en: en_default,
|
|
@@ -22462,7 +22537,7 @@ var NotificationCenter = class NotificationCenter {
|
|
|
22462
22537
|
const before = this.texts.snapshot;
|
|
22463
22538
|
const next = await this.textStore.load();
|
|
22464
22539
|
this.texts.apply(next);
|
|
22465
|
-
if (before
|
|
22540
|
+
if (ncTextSnapshotsEqual(before, next)) return;
|
|
22466
22541
|
this.logger.info("notification texts loaded", { meta: {
|
|
22467
22542
|
language: next.language,
|
|
22468
22543
|
overriddenKeys: Object.values(next.overrides).reduce((sum, keys) => sum + Object.keys(keys ?? {}).length, 0)
|
|
@@ -35397,6 +35472,18 @@ var EmbeddingDispatcher = class {
|
|
|
35397
35472
|
logger;
|
|
35398
35473
|
getRemoteFrame;
|
|
35399
35474
|
lastEmbedTime = /* @__PURE__ */ new Map();
|
|
35475
|
+
/**
|
|
35476
|
+
* trackId -> the frame pinned for it. Each entry holds a WHOLE decoded RGB
|
|
35477
|
+
* frame (`PendingCrop.frameData`, ~0.7 MB), not a crop.
|
|
35478
|
+
*
|
|
35479
|
+
* Under the shipped `cropStrategy: 'first'` this doubles as the in-flight
|
|
35480
|
+
* DEDUPE FLAG — `'first'` gates on `!pendingCrops.has(trackId)` — and there
|
|
35481
|
+
* is no flush timer for that strategy, so nothing ever sweeps it. Until
|
|
35482
|
+
* 2026-08-25 the delete lived on `processOne`'s success path only: an
|
|
35483
|
+
* `extractCrop` throw or an `encoder.encode` rejection (a cross-process cap
|
|
35484
|
+
* over UDS, with no timeout) stranded the frame permanently AND made that
|
|
35485
|
+
* trackId un-embeddable forever. `processOne` now releases in a `finally`.
|
|
35486
|
+
*/
|
|
35400
35487
|
pendingCrops = /* @__PURE__ */ new Map();
|
|
35401
35488
|
flushTimer = null;
|
|
35402
35489
|
unsubscribe = null;
|
|
@@ -35554,7 +35641,6 @@ var EmbeddingDispatcher = class {
|
|
|
35554
35641
|
this._processedCount++;
|
|
35555
35642
|
this._totalInferenceMs += inferenceMs;
|
|
35556
35643
|
this.lastEmbedTime.set(pending.deviceId, Date.now());
|
|
35557
|
-
this.pendingCrops.delete(pending.trackId);
|
|
35558
35644
|
const embeddingId = `${pending.deviceId}/${pending.trackId}/${Date.now()}`;
|
|
35559
35645
|
const payload = {
|
|
35560
35646
|
deviceId: Number(pending.deviceId),
|
|
@@ -35586,8 +35672,21 @@ var EmbeddingDispatcher = class {
|
|
|
35586
35672
|
error: String(err)
|
|
35587
35673
|
}
|
|
35588
35674
|
});
|
|
35675
|
+
} finally {
|
|
35676
|
+
if (this.pendingCrops.get(pending.trackId) === pending) this.pendingCrops.delete(pending.trackId);
|
|
35589
35677
|
}
|
|
35590
35678
|
}
|
|
35679
|
+
/**
|
|
35680
|
+
* Decoded frames currently pinned in {@link pendingCrops}.
|
|
35681
|
+
*
|
|
35682
|
+
* ~0.7 MB each (a whole RGB detection frame, not a crop), so this number IS
|
|
35683
|
+
* the dispatcher's memory footprint. Exposed because the entries are
|
|
35684
|
+
* invisible in every functional read: a stranded one looks exactly like a
|
|
35685
|
+
* track that was never detected.
|
|
35686
|
+
*/
|
|
35687
|
+
pendingFrameCount() {
|
|
35688
|
+
return this.pendingCrops.size;
|
|
35689
|
+
}
|
|
35591
35690
|
};
|
|
35592
35691
|
/**
|
|
35593
35692
|
* Re-embed every listed track from its key frame.
|
|
@@ -51344,10 +51443,16 @@ var BindingCache = class {
|
|
|
51344
51443
|
* `confirm` (S4) is the confirmation-gate re-detect crop: it GATES track birth
|
|
51345
51444
|
* (the frame path awaits it), so it ranks WITH `firstFrame` at 0 — it must
|
|
51346
51445
|
* jump every queued lower-priority capture and its call site never sets a
|
|
51347
|
-
* `staleAfterMs` (a late confirmation still confirms
|
|
51348
|
-
* fail-open a birth the operator asked to be gated). `face`/`plate` (S4) are
|
|
51446
|
+
* `staleAfterMs` (a late confirmation still confirms). `face`/`plate` (S4) are
|
|
51349
51447
|
* enrichment gallery crops — same rank as `embed`: nice-to-have media that
|
|
51350
51448
|
* must never displace the track-media ladder above.
|
|
51449
|
+
*
|
|
51450
|
+
* The admission cap sheds from the TAIL, so a `confirm` can only be shed when
|
|
51451
|
+
* every queued entry is priority 0 — and even then the outcome is safe rather
|
|
51452
|
+
* than fail-open: `fetchCrop` resolving `null` makes `evaluateBirth` return
|
|
51453
|
+
* `undecided(candidate, 'no-crop')`, which is a birth NOT confirmed. This note
|
|
51454
|
+
* used to say a dropped confirm would fail open; it does not, and that is what
|
|
51455
|
+
* makes shedding admissible at all.
|
|
51351
51456
|
*/
|
|
51352
51457
|
var DEFAULT_CAPTURE_PRIORITY = {
|
|
51353
51458
|
firstFrame: 0,
|
|
@@ -51381,9 +51486,14 @@ function deriveFrameDispatchKind(content) {
|
|
|
51381
51486
|
}
|
|
51382
51487
|
var DEFAULT_MAX_IN_FLIGHT_PER_DEVICE = 3;
|
|
51383
51488
|
var DEFAULT_LOG_WINDOW_MS = 6e4;
|
|
51489
|
+
/** One `capture queue full` line per device per this interval. The condition
|
|
51490
|
+
* holds for as long as the lane is saturated; one line per shed request would
|
|
51491
|
+
* be thousands. */
|
|
51492
|
+
var OVERFLOW_WARN_THROTTLE_MS = 6e4;
|
|
51384
51493
|
var CaptureScheduler = class {
|
|
51385
51494
|
logger;
|
|
51386
51495
|
budget;
|
|
51496
|
+
maxQueued;
|
|
51387
51497
|
windowMs;
|
|
51388
51498
|
now;
|
|
51389
51499
|
lanes = /* @__PURE__ */ new Map();
|
|
@@ -51392,9 +51502,12 @@ var CaptureScheduler = class {
|
|
|
51392
51502
|
/** holdKey → refcount of queued/running requests holding it. */
|
|
51393
51503
|
heldKeys = /* @__PURE__ */ new Map();
|
|
51394
51504
|
windows = /* @__PURE__ */ new Map();
|
|
51505
|
+
/** Per-device throttle for the `capture queue full` warn. */
|
|
51506
|
+
lastOverflowWarnAt = /* @__PURE__ */ new Map();
|
|
51395
51507
|
constructor(options) {
|
|
51396
51508
|
this.logger = options.logger;
|
|
51397
51509
|
this.budget = options.maxInFlightPerDevice ?? DEFAULT_MAX_IN_FLIGHT_PER_DEVICE;
|
|
51510
|
+
this.maxQueued = Math.max(1, options.maxQueuedPerDevice ?? 24);
|
|
51398
51511
|
this.windowMs = options.logWindowMs ?? DEFAULT_LOG_WINDOW_MS;
|
|
51399
51512
|
this.now = options.now ?? Date.now;
|
|
51400
51513
|
}
|
|
@@ -51464,6 +51577,7 @@ var CaptureScheduler = class {
|
|
|
51464
51577
|
failed: w.failed,
|
|
51465
51578
|
coalesced: w.coalesced,
|
|
51466
51579
|
droppedStale: w.droppedStale,
|
|
51580
|
+
droppedOverflow: w.droppedOverflow,
|
|
51467
51581
|
cancelled: w.cancelled,
|
|
51468
51582
|
maxQueueDepth: w.maxQueueDepth
|
|
51469
51583
|
};
|
|
@@ -51512,7 +51626,37 @@ var CaptureScheduler = class {
|
|
|
51512
51626
|
throw err;
|
|
51513
51627
|
});
|
|
51514
51628
|
}
|
|
51515
|
-
/**
|
|
51629
|
+
/**
|
|
51630
|
+
* Queue an over-budget request (priority-ordered, FIFO within priority),
|
|
51631
|
+
* under a BOUND enforced here rather than at dequeue.
|
|
51632
|
+
*
|
|
51633
|
+
* ## Why the queue needs its own bound
|
|
51634
|
+
*
|
|
51635
|
+
* `staleAfterMs` is evaluated in {@link pump}, and `pump` only touches the
|
|
51636
|
+
* queue while `inFlight < budget`. A lane that stays saturated therefore
|
|
51637
|
+
* never inspects its queue at all — nothing expires, nothing is shed, and the
|
|
51638
|
+
* queue grows for as long as the pressure lasts. The budget bounds concurrent
|
|
51639
|
+
* WORK; it has never bounded queued work.
|
|
51640
|
+
*
|
|
51641
|
+
* That gap is not theoretical: the per-frame batch dispatch PINS a ~0.7 MB
|
|
51642
|
+
* copy of the detection frame BEFORE queueing (so ring recycling cannot
|
|
51643
|
+
* invalidate it), and the queued closure holds that copy alive. Measured on
|
|
51644
|
+
* the live hub, `hub/pipeline-analytics` ran at rss=3911MB with heapUsed only
|
|
51645
|
+
* 153MB and arrayBuffers=2281MB — 2.28 GB of JS-reachable Buffers, roughly
|
|
51646
|
+
* 3 200 pinned frames, in a runner whose heap limit is 1216 MB. The call site
|
|
51647
|
+
* that pins them says the cost is "bounded by the lane"; it was not.
|
|
51648
|
+
*
|
|
51649
|
+
* Two things happen on the way in, in this order:
|
|
51650
|
+
*
|
|
51651
|
+
* 1. **expire what is already dead.** Entries past their `staleAfterMs` are
|
|
51652
|
+
* dropped now. They were doomed the moment they expired; `pump` simply
|
|
51653
|
+
* never got to look. This is the reclaim that costs nothing.
|
|
51654
|
+
* 2. **shed the least important.** Still over the cap, the TAIL goes — the
|
|
51655
|
+
* queue is ordered by priority, so the tail is by construction the work
|
|
51656
|
+
* this scheduler already ranked last. Whether that is the newcomer or an
|
|
51657
|
+
* older low-priority entry is decided by the same ordering that decides
|
|
51658
|
+
* execution, so a `firstFrame` never loses its place to an `embed`.
|
|
51659
|
+
*/
|
|
51516
51660
|
enqueue(lane, input) {
|
|
51517
51661
|
return new Promise((resolve, reject) => {
|
|
51518
51662
|
const entry = {
|
|
@@ -51525,11 +51669,53 @@ var CaptureScheduler = class {
|
|
|
51525
51669
|
},
|
|
51526
51670
|
drop: () => resolve(null)
|
|
51527
51671
|
};
|
|
51672
|
+
this.dropExpired(input.deviceId, lane);
|
|
51528
51673
|
this.insertByPriority(lane, entry);
|
|
51674
|
+
this.shedToCap(input.deviceId, lane);
|
|
51529
51675
|
const w = this.window(input.deviceId);
|
|
51530
51676
|
if (lane.queue.length > w.maxQueueDepth) w.maxQueueDepth = lane.queue.length;
|
|
51531
51677
|
});
|
|
51532
51678
|
}
|
|
51679
|
+
/** Drop every queued entry already past its `staleAfterMs`. Entries without
|
|
51680
|
+
* one (e.g. `confirm`, which gates track birth) are never expired here. */
|
|
51681
|
+
dropExpired(deviceId, lane) {
|
|
51682
|
+
const nowMs = this.now();
|
|
51683
|
+
for (let i = lane.queue.length - 1; i >= 0; i -= 1) {
|
|
51684
|
+
const entry = lane.queue[i];
|
|
51685
|
+
if (entry === void 0) continue;
|
|
51686
|
+
if (entry.staleAfterMs === void 0 || nowMs - entry.enqueuedAt <= entry.staleAfterMs) continue;
|
|
51687
|
+
lane.queue.splice(i, 1);
|
|
51688
|
+
this.bump(deviceId, "droppedStale");
|
|
51689
|
+
entry.drop();
|
|
51690
|
+
}
|
|
51691
|
+
}
|
|
51692
|
+
/** Shed from the tail (lowest priority, newest within it) until the lane is
|
|
51693
|
+
* at its cap. Loud: a capture that is dropped rather than merely late is a
|
|
51694
|
+
* missing thumbnail or first frame, and silence would read as "never asked". */
|
|
51695
|
+
shedToCap(deviceId, lane) {
|
|
51696
|
+
let shed = 0;
|
|
51697
|
+
while (lane.queue.length > this.maxQueued) {
|
|
51698
|
+
const victim = lane.queue.pop();
|
|
51699
|
+
if (victim === void 0) break;
|
|
51700
|
+
this.bump(deviceId, "droppedOverflow");
|
|
51701
|
+
victim.drop();
|
|
51702
|
+
shed += 1;
|
|
51703
|
+
}
|
|
51704
|
+
if (shed === 0) return;
|
|
51705
|
+
const nowMs = this.now();
|
|
51706
|
+
if (nowMs - (this.lastOverflowWarnAt.get(deviceId) ?? Number.NEGATIVE_INFINITY) < OVERFLOW_WARN_THROTTLE_MS) return;
|
|
51707
|
+
this.lastOverflowWarnAt.set(deviceId, nowMs);
|
|
51708
|
+
this.logger.warn("capture queue full — shedding the lowest-priority captures for this camera", {
|
|
51709
|
+
tags: { deviceId },
|
|
51710
|
+
meta: {
|
|
51711
|
+
shed,
|
|
51712
|
+
cap: this.maxQueued,
|
|
51713
|
+
queueDepth: lane.queue.length,
|
|
51714
|
+
inFlight: lane.inFlight,
|
|
51715
|
+
budget: this.budget
|
|
51716
|
+
}
|
|
51717
|
+
});
|
|
51718
|
+
}
|
|
51533
51719
|
insertByPriority(lane, entry) {
|
|
51534
51720
|
let index = lane.queue.length;
|
|
51535
51721
|
while (index > 0) {
|
|
@@ -51576,6 +51762,7 @@ var CaptureScheduler = class {
|
|
|
51576
51762
|
failed: 0,
|
|
51577
51763
|
coalesced: 0,
|
|
51578
51764
|
droppedStale: 0,
|
|
51765
|
+
droppedOverflow: 0,
|
|
51579
51766
|
cancelled: 0,
|
|
51580
51767
|
maxQueueDepth: 0
|
|
51581
51768
|
};
|
|
@@ -51600,6 +51787,7 @@ var CaptureScheduler = class {
|
|
|
51600
51787
|
failed: w.failed,
|
|
51601
51788
|
coalesced: w.coalesced,
|
|
51602
51789
|
droppedStale: w.droppedStale,
|
|
51790
|
+
droppedOverflow: w.droppedOverflow,
|
|
51603
51791
|
cancelled: w.cancelled,
|
|
51604
51792
|
maxQueueDepth: w.maxQueueDepth,
|
|
51605
51793
|
queueDepth: this.queueDepth(deviceId),
|
|
@@ -52688,6 +52876,36 @@ function buildAudioLabels(input) {
|
|
|
52688
52876
|
}];
|
|
52689
52877
|
}
|
|
52690
52878
|
//#endregion
|
|
52879
|
+
//#region src/pipeline-analytics/services/event-kinds-prefetch.ts
|
|
52880
|
+
/**
|
|
52881
|
+
* Resolve linked devices and bindings for `deviceIds` in two calls.
|
|
52882
|
+
*
|
|
52883
|
+
* Sequential by necessity, not by oversight: the binding set is cameras PLUS
|
|
52884
|
+
* everything linked to them, and the linked set is what the first call
|
|
52885
|
+
* returns.
|
|
52886
|
+
*
|
|
52887
|
+
* A camera or linked device missing from a batch answer resolves EMPTY rather
|
|
52888
|
+
* than throwing. Both batch endpoints answer for every id they were given, so
|
|
52889
|
+
* a gap here is a hub that answered a shorter array than it was asked for —
|
|
52890
|
+
* one camera loses its sensor lanes, never the whole request.
|
|
52891
|
+
*/
|
|
52892
|
+
async function prefetchDeviceTopology(api, deviceIds) {
|
|
52893
|
+
const ids = [...new Set(deviceIds)];
|
|
52894
|
+
const linkedRows = await api.getLinkedDevicesBatch({ deviceIds: ids });
|
|
52895
|
+
const linkedByDevice = new Map(linkedRows.map((row) => [row.deviceId, row]));
|
|
52896
|
+
const bindingTargets = new Set(ids);
|
|
52897
|
+
for (const row of linkedRows) for (const linked of row.devices) bindingTargets.add(linked.deviceId);
|
|
52898
|
+
const bindingRows = await api.getBindingsBatch({ deviceIds: [...bindingTargets] });
|
|
52899
|
+
const bindingsByDevice = new Map(bindingRows.map((row) => [row.deviceId, row]));
|
|
52900
|
+
return {
|
|
52901
|
+
linkedDevices: { getLinkedDevices: async ({ deviceId }) => linkedByDevice.get(deviceId) ?? {
|
|
52902
|
+
mode: "auto",
|
|
52903
|
+
devices: []
|
|
52904
|
+
} },
|
|
52905
|
+
bindings: { getBindings: async ({ deviceId }) => bindingsByDevice.get(deviceId) ?? { entries: [] } }
|
|
52906
|
+
};
|
|
52907
|
+
}
|
|
52908
|
+
//#endregion
|
|
52691
52909
|
//#region src/pipeline-analytics/services/event-kinds.ts
|
|
52692
52910
|
/**
|
|
52693
52911
|
* Extensible per-device event kinds (Part B).
|
|
@@ -53170,8 +53388,14 @@ var EventMediaDispatcher = class {
|
|
|
53170
53388
|
* scheduler request against a 3-slot device lane and can start seconds late,
|
|
53171
53389
|
* by which time the handle's ring slot is usually recycled and the by-handle
|
|
53172
53390
|
* resolve in {@link captureForFrame} finds nothing (the 2026-07-23 boxed-tile
|
|
53173
|
-
* regression). ~0.7MB per pinned frame, freed with the batch
|
|
53174
|
-
*
|
|
53391
|
+
* regression). ~0.7MB per pinned frame, freed with the batch.
|
|
53392
|
+
*
|
|
53393
|
+
* THE COPY IS ONLY AS BOUNDED AS THE QUEUE THAT HOLDS IT. This said "bounded
|
|
53394
|
+
* by the lane" while the lane bounded in-flight execs (3) and nothing at all
|
|
53395
|
+
* bounded the queue behind them, so a saturated camera accumulated pinned
|
|
53396
|
+
* frames without limit — 2.28 GB of `arrayBuffers` measured on the live hub.
|
|
53397
|
+
* Every caller must therefore pass `staleAfterMs`, and `CaptureScheduler`
|
|
53398
|
+
* caps queue depth per device. Returns `null` on a genuine live-window miss.
|
|
53175
53399
|
*
|
|
53176
53400
|
* Both miss paths are WARN, throttled to one line per device per minute. They
|
|
53177
53401
|
* are the FIRST half of a pair whose second half (`capture batch lost`) has
|
|
@@ -60645,6 +60869,7 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends BaseAddon {
|
|
|
60645
60869
|
hasSnapshot: snapshotTargets.some((t) => t.appendSnapshot)
|
|
60646
60870
|
}),
|
|
60647
60871
|
holdKeys: heldCaptureKeys,
|
|
60872
|
+
staleAfterMs: ENRICHMENT_CAPTURE_STALE_MS,
|
|
60648
60873
|
exec: () => pinnedFramePromise.then((pinnedFrame) => dispatcher.captureForFrame({
|
|
60649
60874
|
deviceId,
|
|
60650
60875
|
frameHandle,
|
|
@@ -61574,7 +61799,9 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends BaseAddon {
|
|
|
61574
61799
|
this.captureScheduler.request({
|
|
61575
61800
|
deviceId,
|
|
61576
61801
|
kind: "thumbnail",
|
|
61802
|
+
trackId,
|
|
61577
61803
|
holdKeys: [captureCoalesceKey(deviceId, "thumbnail", trackId)],
|
|
61804
|
+
staleAfterMs: ENRICHMENT_CAPTURE_STALE_MS,
|
|
61578
61805
|
exec: async () => {
|
|
61579
61806
|
const [pinnedFrame, media] = await Promise.all([pinnedFramePromise, this.resolveDeviceMediaSettings(deviceId)]);
|
|
61580
61807
|
const res = await dispatcher.captureForFrame({
|
|
@@ -63155,11 +63382,20 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends BaseAddon {
|
|
|
63155
63382
|
/**
|
|
63156
63383
|
* `listEventKinds` for many cameras, in one call.
|
|
63157
63384
|
*
|
|
63158
|
-
* The saving is not
|
|
63159
|
-
*
|
|
63160
|
-
*
|
|
63161
|
-
*
|
|
63162
|
-
*
|
|
63385
|
+
* The saving is not the round-trips the CALLER avoids — it is the fan-out
|
|
63386
|
+
* this method used to do on its own. Composing one camera's vocabulary asks
|
|
63387
|
+
* device-manager for its status, its linked devices, and the bindings of
|
|
63388
|
+
* itself plus each linked device; asked per camera that was 1 + N + (N +
|
|
63389
|
+
* linked) cross-process calls. Measured on the live hub 2026-08-25 over this
|
|
63390
|
+
* deployment's 30 cameras: 106 calls, of which 30 concurrent
|
|
63391
|
+
* `getLinkedDevices` alone took 4110 ms — each one runs a full-fleet
|
|
63392
|
+
* `listAll` inside device-manager and thirty of them QUEUE.
|
|
63393
|
+
*
|
|
63394
|
+
* Now three calls for the whole set, whatever N is: one
|
|
63395
|
+
* `getCameraStatuses`, then `prefetchDeviceTopology`'s
|
|
63396
|
+
* `getLinkedDevicesBatch` + `getBindingsBatch`. `composeEventKinds` is
|
|
63397
|
+
* unchanged — it is handed the same per-device client interfaces, backed by
|
|
63398
|
+
* maps instead of RPC.
|
|
63163
63399
|
*
|
|
63164
63400
|
* A camera whose composition fails yields an EMPTY list rather than dropping
|
|
63165
63401
|
* out of the response: a caller that asked for twelve and got eleven cannot
|
|
@@ -63177,13 +63413,23 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends BaseAddon {
|
|
|
63177
63413
|
});
|
|
63178
63414
|
const statusByDevice = new Map(statuses.map((st) => [st.deviceId, st]));
|
|
63179
63415
|
const detectionMacros = MACRO_LABELS.map((l) => l.id).filter((id) => id !== "package");
|
|
63416
|
+
const topology = await prefetchDeviceTopology({
|
|
63417
|
+
getLinkedDevicesBatch: (i) => api.deviceManager.getLinkedDevicesBatch.query(i),
|
|
63418
|
+
getBindingsBatch: (i) => api.deviceManager.getBindingsBatch.query(i)
|
|
63419
|
+
}, deviceIds).catch((err) => {
|
|
63420
|
+
this.ctx.logger.warn("listEventKindsBatch: batched device topology unavailable — per-device fallback", { meta: {
|
|
63421
|
+
deviceCount: deviceIds.length,
|
|
63422
|
+
error: errMsg(err)
|
|
63423
|
+
} });
|
|
63424
|
+
return null;
|
|
63425
|
+
});
|
|
63180
63426
|
return composeEventKindsForDevices(deviceIds, async (deviceId) => {
|
|
63181
63427
|
const status = statusByDevice.get(deviceId) ?? null;
|
|
63182
63428
|
const detectionOn = status?.detection != null;
|
|
63183
63429
|
const audioOn = status?.audio?.enabled === true;
|
|
63184
63430
|
return composeEventKinds({
|
|
63185
|
-
linkedDevices: { getLinkedDevices: (i) => api.deviceManager.getLinkedDevices.query(i) },
|
|
63186
|
-
bindings: { getBindings: (i) => api.deviceManager.getBindings.query(i) },
|
|
63431
|
+
linkedDevices: topology?.linkedDevices ?? { getLinkedDevices: (i) => api.deviceManager.getLinkedDevices.query(i) },
|
|
63432
|
+
bindings: topology?.bindings ?? { getBindings: (i) => api.deviceManager.getBindings.query(i) },
|
|
63187
63433
|
enabledMacroClasses: async () => detectionOn ? detectionMacros : [],
|
|
63188
63434
|
audioEnabled: async () => audioOn,
|
|
63189
63435
|
packageZonesEnabled: async (id) => {
|
|
@@ -30,7 +30,7 @@ async function d(e) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
async function f() {
|
|
33
|
-
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-
|
|
33
|
+
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-u9dpdQPa.mjs")).catch((e) => {
|
|
34
34
|
throw l = void 0, e;
|
|
35
35
|
}), l;
|
|
36
36
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-post-analysis",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.120",
|
|
4
4
|
"description": "Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
//#region \0virtual:mf:__mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js
|
|
2
|
-
var e = "__mf_init__virtual:mf:__mfe_internal__addon_pipeline_analytics_widgets__mf_v__runtimeInit__mf_v__.js__", t = globalThis[e];
|
|
3
|
-
if (!t) {
|
|
4
|
-
let n, r, i = new Promise((e, t) => {
|
|
5
|
-
n = e, r = t;
|
|
6
|
-
});
|
|
7
|
-
t = globalThis[e] = {
|
|
8
|
-
initPromise: i,
|
|
9
|
-
initResolve: n,
|
|
10
|
-
initReject: r
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
var n = t.initPromise, r = "__mf_module_cache__";
|
|
14
|
-
globalThis[r] ||= {
|
|
15
|
-
share: {},
|
|
16
|
-
remote: {}
|
|
17
|
-
}, globalThis[r].share ||= {}, globalThis[r].remote ||= {};
|
|
18
|
-
var i = globalThis[r], a, o, s, c, l, u, d, f = (e) => {
|
|
19
|
-
e.AddonGlobalSettingsForm, e.AgentStepEditor, e.AlarmHeroCard, e.AlarmPanelInlineControl, e.AppShell, e.ArcKnob, e.AudioClassificationList, e.AudioLevelWaveform, e.AudioWaveform, e.AutomationHeroCard, e.AutomationInlineControl, e.AutotrackSection, e.BTN_COMPACT, e.BTN_COMPACT_DANGER, e.BTN_COMPACT_PRIMARY, e.BTN_COMPACT_WARNING, e.Badge, e.BatteryBadge, e.BottomSheet, e.Breadcrumb, e.BrightnessPanel, e.Button, e.ButtonControl, e.ButtonHeroCard, e.CARD_MODE_MIN_COLUMNS, e.CENTER, e.CHIP_ACTIVE, e.CHIP_BASE, e.CHIP_INACTIVE, e.CLASS_COLORS, e.COLUMN_BREAKPOINT_CLASS, e.COLUMN_PRIORITY, e.COMMIT_DEDUPE_TOLERANCE_MS, e.COMMIT_DEDUPE_WINDOW_MS, e.CONTROL_CAP_NAMES, e.CONTROL_FILLS, e.Camera, e.CameraStreamPlayer, e.Card, e.Checkbox, e.ChildSectionAccordion, e.ClimatePanel, e.CodeBlock, e.CollapsibleCard, e.ConfigFormBuilder, e.ConfigFormField, e.ConfigSchemaField, e.ConfirmActionButton, e.ConfirmDialogProvider, e.ConsumablesPanel, e.ContainerChildrenProvider, e.ContainerPrimaryHero, e.ControlColumn, e.ControlHeroCard, e.ControlInlineControl, e.ControlPanel, e.CopyButton, e.CoverHeroCard, e.CoverInlineControl, e.CoverPanel, e.CustomFieldRenderersProvider, e.DEFAULT_COLOR, e.DEVICE_COLUMNS, e.DEVICE_LIST_PAGE_SIZE_KEY, e.DEVICE_LIST_PAGE_SIZE_OPTIONS, e.DEVICE_ROLE_META, e.DEVICE_TYPE_CONTROL, e.DEVICE_TYPE_META, e.DISPLAY_ICON_REGISTRY, e.DataTable, e.DetectionCanvas, e.DetectionOverlay, e.DetectionResultTree, e.DevShell, e.DeviceActivityPanel, e.DeviceBatchToolbar, e.DeviceCard, e.DeviceContextProvider, e.DeviceExportPanel, e.DeviceGrid, e.DeviceItem, e.DeviceList, e.DeviceMultiSelectField, e.DeviceSelectField, e.DeviceSelectorPicker, e.DeviceStepMatrix, e.Dialog, e.DialogBody, e.DialogContent, e.DialogDescription, e.DialogFooter, e.DialogHeader, e.DialogTitle, e.DialogTrigger, e.DiscoveryPanel, e.DoorbellRecentPanel, e.Dropdown, e.DropdownContent, e.DropdownItem, e.DropdownTrigger, e.DummyHeroCard, e.DummyInline, e.EVENT_KIND_ICONS, e.EmptyState, e.ErrorBox, e.EventKindGlyph, e.EventStream, e.EyeOff, e.FILL, e.FanHeroCard, e.FanInlineControl, e.FanPanel, e.FilterBar, e.FloatingEventStream, e.FloatingLogStream, e.FloatingPanel, e.FormField, a = e.GRID_GAP, e.GRID_PAIRED, e.GRID_QUICK_STATS, e.GripTrack, e.GroupedModelSelector, e.HOST_WIDGETS, e.HlsVideo, e.HoverZoomImage, e.HumidifierHeroCard, e.HumidifierInlineControl, e.INPUT_COMPACT, e.IconAction, e.IconButton, e.ImageHeroCard, e.ImageInlineControl, e.ImageOff, e.ImageSelector, e.InferenceConfigSelector, e.Input, e.KebabMenu, e.KeyValueList, e.LIST_ROW, e.Label, e.LawnMowerHeroCard, e.LawnMowerInlineControl, e.LightHeroCard, e.LightInlineControl, e.LockHeroCard, e.LockInlineControl, e.LockPanel, e.LogStream, e.LoginForm, e.MODE_COLOR, e.MaskShapeCanvas, e.MediaPlayerHeroCard, e.MediaPlayerInlineControl, e.MediaPlayerPanel, e.Mic, e.MobileDrawer, e.ModelPicker, e.MotionZonesSettings, e.NodeMultiSelectField, e.NodePicker, e.NodeSelectField, e.OfflineBadge, e.PHASE_CONFIG, e.PRIORITY, e.PTZOverlay, e.PageHeader, e.PhaseIcon, e.PipelineBuilder, e.PipelineRuntimeSelector, e.PipelineStep, e.PipelineTreeMatrix, e.PlayerOverlaysProvider, e.Popover, e.PopoverContent, e.PopoverRowAction, e.PopoverTrigger, e.PrimaryChildPicker, e.PrivacyMaskSettings, e.ProviderBadge, e.PtzPanel, e.QrCode, e.RECONNECT_POLICY, e.RECORDED_PLAYBACK_MODES, e.RIGHT, e.ROI_AREA_WARN_FRACTION, e.ROLE_DESCRIPTOR, e.RadialGauge, e.RecordedPlaybackProvider, e.RecordingPanel, e.ResponseLog, e.RotateCcw, e.SCENE_CAPTURE_VARIANTS, e.SCENE_CAPTURE_VARIANTS$1, e.SECTION_BODY, e.SECTION_CARD, e.SECTION_HEADER, e.SETTING_ROW, e.SETTING_ROW_LABEL, e.SETTING_ROW_STACK_BREAKPOINT, e.SETTING_ROW_VALUE, e.SETTING_ROW_VALUE_TEXT, e.SPLIT_PANEL_OUTER, e.SPLIT_PANEL_SIDE, o = e.STACK_GAP, e.STATE_COLOR, e.SceneMonitorEditor, e.ScopePicker, e.ScriptHeroCard, e.ScriptInlineControl, e.ScrollArea, e.Select, e.SemanticBadge, e.SensorHeroCard, e.SensorInlineControl, e.SensorValueAtom, e.Separator, e.SettingRow, e.Sidebar, e.SidebarItem, e.Skeleton, e.SlideOverPanel, e.SlideToggle, e.SnapshotButton, e.Square, e.StatCard, e.StateValuesStream, e.StatusBadge, e.StepTimings, e.StepTreeMaster, e.Stepper, e.StreamBrokerSelector, e.StreamPanel, e.Switch, e.SwitchHeroCard, e.SwitchInlineControl, e.SwitchPanel, e.SystemProvider, e.TABLE_SCROLL_MAX_H, e.TEXT_FIELD_LABEL, e.TEXT_HINT, e.TEXT_METRIC, e.TEXT_SECTION_LABEL, e.TEXT_VALUE, e.TIMEZONES, e.Tabs, e.TabsContent, e.TabsList, e.TabsTrigger, e.TapToggle, e.ThemeProvider, e.ThermostatHeroCard, e.ThermostatInlineControl, e.TimezoneSelector, e.Tooltip, e.TooltipContent, e.TooltipTrigger, e.Trash2, e.VacuumHeroCard, e.VacuumInlineControl, e.ValueReadout, e.ValveHeroCard, e.ValveInlineControl, e.VersionBadge, e.VodPlaybackProvider, e.WaterHeaterHeroCard, e.WaterHeaterInlineControl, e.WeatherHeroCard, e.WeatherInlineControl, e.WidgetMetricCard, e.WidgetPanel, e.WidgetRegistryProvider, s = e.WidgetSlot, e.ZoneEditingProvider, e.agentColumnKey, e.allDeviceTypeFilterOptions, e.badgeFor, e.badgeFor$1, e.buildStepTreeFromSchema, e.childEntityId, e.childListName, e.cn, e.columnsForContext, e.containerChildToRef, e.countableDevices, e.coverHighlight, e.coverageLine, e.coverageLine$1, e.createLucideIcon, e.createSharedContext, e.createTheme, e.cursorFractionFor, e.darkColors, e.defaultTheme, e.deriveDeviceKind, e.describeDeviceSelector, e.deviceMatchesFilter, e.deviceOptionLabel, e.deviceRoleMeta, e.deviceRoleMetaOf, e.deviceTypeLabel, e.deviceTypeMeta, e.deviceTypeMetaOf, e.devicesToOptions, e.ensureMfHostInit, e.eventKindLabel, e.filterDeviceOptions, e.findTimezone, e.formatControlDateTime, e.formatLastSeen, e.formatNumeric, e.fuzzyMatch, e.getClassColor, e.getPhaseVisual, e.groupAgentColumns, e.groupChildrenByLayout, e.hardwareLabel, e.humanDuration, e.humidifierTint, e.initialScrubState, e.isAbsentProvider, e.isAbsentProvider$1, e.isFieldVisible, e.lawnMowerActivityMeta, e.lightColors, e.loadRemoteBundle, e.makeScrubBridge, e.metadataEntries, e.metadataString, e.mirror, e.mountAddonPage, e.nextReconnectAction, e.nextSort, e.normalizeForSearch, e.overrideEntityIdFromLink, e.parseRecordedServerMessage, e.providerIcons, e.resolveContainerPrimary, e.resolveControlAlign, e.resolveDeviceControl, e.resolveDisplayIcon, e.resolveEffectiveDefaultModel, e.resolveEffectiveStepModel, e.resolveEventKindIcon, e.resolvePrimaryChild, e.resolveSensorDisplay, e.resolveStepDefaultModel, e.resolveTableLayout, e.roiTooLarge, e.roiTooLarge$1, e.scrubReducer, e.selectedDeviceOptions, e.serializeRecordedCommand, e.shouldCommit, e.shouldEmit, e.shouldUseSingleNode, e.sortRows, e.statusIcons, e.statusLine, e.statusLine$1, e.stepHasModelForFormat, e.stepModelOptions, e.stripParentNamePrefix, e.tabForSelector, e.tankAlert, e.themeToCss, e.trpc, e.useAccessoriesGetStatus, e.useAccessoriesSetChildHidden, e.useAddonPagesListPages, e.useAddonSettingsGetDeviceSettings, e.useAddonSettingsGetGlobalSettings, e.useAddonSettingsUpdateDeviceSettings, e.useAddonSettingsUpdateGlobalSettings, e.useAddonWidgetsListWidgets, e.useAddonsApplyAutoUpdateToAll, e.useAddonsCancelJob, e.useAddonsCustom, e.useAddonsForceRefresh, e.useAddonsGetAddonAutoUpdate, e.useAddonsGetAutoUpdateSettings, e.useAddonsGetJob, e.useAddonsGetLastRestart, e.useAddonsGetLogs, e.useAddonsGetVersions, e.useAddonsInstallFromWorkspace, e.useAddonsInstallPackage, e.useAddonsIsWorkspaceAvailable, e.useAddonsList, e.useAddonsListCapabilityProviders, e.useAddonsListFrameworkPackages, e.useAddonsListJobs, e.useAddonsListPackages, e.useAddonsListUpdates, e.useAddonsListWorkspacePackages, e.useAddonsOnAddonLogs, e.useAddonsReloadPackages, e.useAddonsRestartAddon, e.useAddonsRestartServer, e.useAddonsRetryLoad, e.useAddonsRollbackPackage, e.useAddonsSearchAvailable, e.useAddonsSetAddonAutoUpdate, e.useAddonsSetAutoUpdateSettings, e.useAddonsSetCapabilityProviderEnabled, e.useAddonsStartJob, e.useAddonsUninstallPackage, e.useAddonsUpdatePackage, e.useAirQualitySensorGetStatus, e.useAlarmPanelArm, e.useAlarmPanelDisarm, e.useAlarmPanelGetStatus, e.useAlarmPanelTrigger, e.useAlertsDismiss, e.useAlertsEmit, e.useAlertsGetUnreadCount, e.useAlertsList, e.useAlertsMarkAllRead, e.useAlertsMarkRead, e.useAlertsUpdate, e.useAllWidgets, e.useAmbientLightSensorGetStatus, e.useAudioAnalysisApplyDeviceSettingsPatch, e.useAudioAnalysisGetDeviceLiveContribution, e.useAudioAnalysisGetDeviceSettingsContribution, e.useAudioAnalysisResolveDeviceSettings, e.useAudioAnalyzerAnalyseChunk, e.useAudioAnalyzerClassify, e.useAudioAnalyzerDispose, e.useAudioAnalyzerIsReady, e.useAudioAnalyzerReprobeAudioEngine, e.useAudioCodecCanHandle, e.useAudioCodecCloseSession, e.useAudioCodecCreateDecodeSession, e.useAudioCodecCreateEncodeSession, e.useAudioCodecFlushEncode, e.useAudioCodecListActiveSessions, e.useAudioCodecListSupportedCodecs, e.useAudioCodecPullEncoded, e.useAudioCodecPullPcm, e.useAudioCodecPushEncodedFrame, e.useAudioCodecPushPcm, e.useAudioMetricsGetCurrentSnapshot, e.useAudioMetricsGetHistory, e.useAutomationControlDisable, e.useAutomationControlEnable, e.useAutomationControlGetStatus, e.useAutomationControlTrigger, e.useBackupDelete, e.useBackupDeleteSchedule, e.useBackupGetEntries, e.useBackupList, e.useBackupListArchives, e.useBackupListDestinations, e.useBackupListLocations, e.useBackupListSchedules, e.useBackupPreviewSchedule, e.useBackupRestore, e.useBackupTrigger, e.useBackupUpsertDestinationPolicy, e.useBackupUpsertSchedule, e.useBatteryGetStatus, e.useBatteryWakeForStream, e.useBinaryGetStatus, e.useBrightnessGetStatus, e.useBrightnessSetBrightness, e.useBrokerAdd, e.useBrokerGet, e.useBrokerGetBrokerConfig, e.useBrokerGetSettings, e.useBrokerGetSettingsSchema, e.useBrokerGetState, e.useBrokerGetStatus, e.useBrokerList, e.useBrokerListProviders, e.useBrokerPublish, e.useBrokerRemove, e.useBrokerSetSettings, e.useBrokerSubscribe, e.useBrokerTestConnection, e.useBrokerTestSettings, e.useBrokerUnsubscribe, e.useButtonPress, e.useCameraCredentialsGetCredentials, e.useCameraCredentialsGetStatus, e.useCameraPipelineConfigApplyDeviceSettingsPatch, e.useCameraPipelineConfigGetDeviceLiveContribution, e.useCameraPipelineConfigGetDeviceSettingsContribution, e.useCameraStreamsGetBrokerStreams, e.useCameraStreamsGetCameraStreams, e.useCameraStreamsGetProfileRtspEntries, e.useCameraStreamsGetRtspEntries, e.useCameraStreamsPickStream, e.useCarbonMonoxideGetStatus, e.useClimateControlGetStatus, e.useClimateControlSetFanMode, e.useClimateControlSetMode, e.useClimateControlSetPreset, e.useClimateControlSetSwingHorizontal, e.useClimateControlSetSwingVertical, e.useClimateControlSetTarget, e.useClimateControlSetTargetHumidity, e.useClimateControlSetTargetRange, e.useClusterNodes, e.useColorGetStatus, e.useColorSetColor, e.useConfirm, e.useConnectionTestDescribeTest, e.useConnectionTestTestSettings, e.useConnectivityGetStatus, e.useConsumablesGetStatus, e.useConsumablesReset, e.useContactGetStatus, e.useContainerChildren, e.useControlGetStatus, e.useControlSetValue, e.useCoreBlocksCompile, e.useCoreBlocksCreate, e.useCoreBlocksDelete, e.useCoreBlocksGet, e.useCoreBlocksGetTypeDefs, e.useCoreBlocksList, e.useCoreBlocksRestart, e.useCoreBlocksSetEnabled, e.useCoreBlocksUpdate, e.useCoverClose, e.useCoverGetStatus, e.useCoverOpen, e.useCoverSetPosition, e.useCoverSetTiltPosition, e.useCoverStop, e.useCustomFieldRenderer, e.useDayNightGetOptions, e.useDayNightGetStatus, e.useDayNightSetSettings, e.useDebouncedString, e.useDecoderCreateSession, e.useDecoderDestroySession, e.useDecoderGetFrame, e.useDecoderGetInfo, e.useDecoderGetShmStats, e.useDecoderGetStats, e.useDecoderListActiveSessions, e.useDecoderOpenStream, e.useDecoderPullFrames, e.useDecoderPullHandles, e.useDecoderPushPacket, e.useDecoderReprobeHwaccel, e.useDecoderSupportsCodec, e.useDecoderUpdateConfig, e.useDetectionPipelineApplyDeviceSettingsPatch, e.useDetectionPipelineGetDeviceLiveContribution, e.useDetectionPipelineGetDeviceSettingsContribution, e.useDevShell, e.useDevice, e.useDeviceAdoptionAdopt, e.useDeviceAdoptionGetCandidate, e.useDeviceAdoptionGetStatus, e.useDeviceAdoptionListCandidateFilters, e.useDeviceAdoptionListCandidates, e.useDeviceAdoptionRefresh, e.useDeviceAdoptionRelease, e.useDeviceAdoptionResync, e.useDeviceAutotrack, e.useDeviceBattery, e.useDeviceCapSlice, e.useDeviceCapability, e.useDeviceDetections, e.useDeviceDiscoveryAdoptDevice, e.useDeviceDiscoveryGetStatus, e.useDeviceDiscoveryListDiscovered, e.useDeviceDiscoveryRefreshDiscovery, e.useDeviceDiscoveryReleaseDevice, e.useDeviceExportApplyDeviceSettingsPatch, e.useDeviceExportExposeDevice, e.useDeviceExportGetDeviceLiveContribution, e.useDeviceExportGetDeviceSettingsContribution, e.useDeviceExportGetStatus, e.useDeviceExportListExposedDevices, e.useDeviceExportListSupportedDeviceKinds, e.useDeviceExportUnexposeDevice, e.useDeviceId, e.useDeviceListPageSize, e.useDeviceManagerAddLocation, e.useDeviceManagerAdoptDevice, e.useDeviceManagerAdoptionAdopt, e.useDeviceManagerAdoptionCancelJob, e.useDeviceManagerAdoptionListCandidateFilters, e.useDeviceManagerAdoptionListCandidates, e.useDeviceManagerAdoptionListJobs, e.useDeviceManagerAdoptionRefresh, e.useDeviceManagerAdoptionRelease, e.useDeviceManagerAdoptionResync, e.useDeviceManagerAdoptionStartJob, e.useDeviceManagerAllocateDeviceId, e.useDeviceManagerApplyDeviceSettingsPatch, e.useDeviceManagerApplyInitialMeta, e.useDeviceManagerCreateDevice, e.useDeviceManagerDisable, e.useDeviceManagerDiscoverAllProviders, e.useDeviceManagerDiscoverDevices, e.useDeviceManagerDiscoverProvider, e.useDeviceManagerDiscoveryProviders, e.useDeviceManagerEnable, e.useDeviceManagerGetAllBindings, e.useDeviceManagerGetBindings, e.useDeviceManagerGetChildren, e.useDeviceManagerGetConfigSchema, e.useDeviceManagerGetCreationSchema, e.useDeviceManagerGetDevice, e.useDeviceManagerGetDeviceAggregate, e.useDeviceManagerGetDeviceLiveContribution, e.useDeviceManagerGetDeviceLiveInfoAggregate, e.useDeviceManagerGetDeviceSettingsAggregate, e.useDeviceManagerGetDeviceSettingsContribution, e.useDeviceManagerGetDeviceStatusAggregate, e.useDeviceManagerGetDeviceStatusAggregateBatch, e.useDeviceManagerGetLinkedDevices, e.useDeviceManagerGetRoleDisplayDefaults, e.useDeviceManagerGetSettingsSchema, e.useDeviceManagerGetStreamProfileMap, e.useDeviceManagerGetStreamSources, e.useDeviceManagerGetWireableFields, e.useDeviceManagerListAll, e.useDeviceManagerListBindableCapsForDeviceType, e.useDeviceManagerListLocations, e.useDeviceManagerListPersistedByAddon, e.useDeviceManagerListWrappersForCap, e.useDeviceManagerLoadConfig, e.useDeviceManagerLoadMeta, e.useDeviceManagerLoadRuntimeState, e.useDeviceManagerPersistConfig, e.useDeviceManagerProbeStreams, e.useDeviceManagerProviderCreationType, e.useDeviceManagerProviderDiscoveryParamsSchema, e.useDeviceManagerRegisterDevice, e.useDeviceManagerRemove, e.useDeviceManagerRemoveByIntegration, e.useDeviceManagerRemoveDevice, e.useDeviceManagerRemoveLocation, e.useDeviceManagerRunDeviceAction, e.useDeviceManagerSetChildLayout, e.useDeviceManagerSetDisabled, e.useDeviceManagerSetDisplay, e.useDeviceManagerSetIntegrationId, e.useDeviceManagerSetLinkDeviceId, e.useDeviceManagerSetLocation, e.useDeviceManagerSetMetadata, e.useDeviceManagerSetName, e.useDeviceManagerSetPrimaryChildEntityId, e.useDeviceManagerSetRole, e.useDeviceManagerSetRoleDisplayDefaults, e.useDeviceManagerSetStreamProfileMap, e.useDeviceManagerSetType, e.useDeviceManagerSetWrapperActive, e.useDeviceManagerTestCreationField, e.useDeviceManagerTestField, e.useDeviceManagerUpdateConfig, e.useDeviceManagerUpdateDeviceField, e.useDeviceManagerUpdateDeviceFieldsBatch, e.useDeviceOpsGetConfigEntries, e.useDeviceOpsGetRawState, e.useDeviceOpsGetSettingsSchema, e.useDeviceOpsGetStreamSources, e.useDeviceOpsRemoveDevice, e.useDeviceOpsRunAction, e.useDeviceOpsSetConfig, e.useDeviceProviderAdoptDiscoveredDevice, e.useDeviceProviderCreateDevice, e.useDeviceProviderDiscoverDevices, e.useDeviceProviderGetChildCreationSchema, e.useDeviceProviderGetDevices, e.useDeviceProviderGetDiscoveryParamsSchema, e.useDeviceProviderGetManualCreationType, e.useDeviceProviderGetStatus, e.useDeviceProviderStart, e.useDeviceProviderStop, e.useDeviceProviderSupportsDiscovery, e.useDeviceProviderSupportsManualCreation, e.useDeviceProviderTestCreationField, c = e.useDeviceProxy, e.useDeviceProxy$1, e.useDeviceSnapshot, e.useDeviceSnapshotImage, e.useDeviceSnapshotImage$1, l = e.useDeviceState, e.useDeviceStateGetAllSnapshots, e.useDeviceStateGetCapSlice, e.useDeviceStateGetSnapshot, e.useDeviceStateSetCapSlice, u = e.useDeviceStateSlice, e.useDeviceStateSlice$1, e.useDeviceStatusGetStatus, e.useDeviceWebrtc, e.useDevices, e.useDoorbellApplyDeviceSettingsPatch, e.useDoorbellEvents, e.useDoorbellGetDeviceLiveContribution, e.useDoorbellGetDeviceSettingsContribution, e.useDoorbellGetStatus, e.useEnumSensorGetStatus, e.useEventEmitterGetStatus, e.useEventInvalidation, e.useEventStreamLatest, e.useEventStreamMap, e.useEventsGetEventClipUrl, e.useEventsGetEventThumbnail, e.useEventsGetEvents, e.useFaceGalleryAssignFace, e.useFaceGalleryAssignFaces, e.useFaceGalleryCreateIdentity, e.useFaceGalleryDeleteFace, e.useFaceGalleryDeleteIdentity, e.useFaceGalleryGetFaceByTrack, e.useFaceGalleryGetFaceMedia, e.useFaceGalleryListIdentities, e.useFaceGalleryListIdentitySamples, e.useFaceGalleryListRecentFaces, e.useFaceGalleryRemoveSample, e.useFaceGalleryRenameIdentity, e.useFaceGallerySuggestFaceClusters, e.useFaceGalleryUnassignFace, e.useFaceGalleryUnassignFaces, e.useFanControlGetStatus, e.useFanControlSetDirection, e.useFanControlSetOscillating, e.useFanControlSetPercentage, e.useFanControlSetPreset, e.useFeatureProbeGetStatus, e.useFloodGetStatus, e.useGasGetStatus, e.useHumidifierGetStatus, e.useHumidifierSetMode, e.useHumidifierSetOn, e.useHumidifierSetTargetHumidity, e.useHumiditySensorGetStatus, e.useImageGetStatus, e.useImageSettingsGetOptions, e.useImageSettingsGetStatus, e.useImageSettingsSetSettings, e.useIntegrationsCreate, e.useIntegrationsDelete, e.useIntegrationsGet, e.useIntegrationsGetAvailableTypes, e.useIntegrationsGetByAddonId, e.useIntegrationsGetSettings, e.useIntegrationsList, e.useIntegrationsSetSettings, e.useIntegrationsTestConnection, e.useIntegrationsUpdate, e.useIntercomEndTalkSession, e.useIntercomGetStatus, e.useIntercomHandleAnswer, e.useIntercomPushTalkAudio, e.useIntercomStartSession, e.useIntercomStartTalkSession, e.useIntercomStopSession, e.useIsMidWidth, e.useIsMobile, e.useLawnMowerControlDock, e.useLawnMowerControlGetStatus, e.useLawnMowerControlPause, e.useLawnMowerControlStartMowing, e.useLiveBuffer, e.useLiveEvent, e.useLlmCancel, e.useLlmDeleteModel, e.useLlmDeleteProfile, e.useLlmGenerate, e.useLlmGenerateVision, e.useLlmGetDefaults, e.useLlmGetRuntimeStatus, e.useLlmGetUsage, e.useLlmInstallModel, e.useLlmListModelCatalog, e.useLlmListModels, e.useLlmListNodeModels, e.useLlmListProfileKinds, e.useLlmListProfiles, e.useLlmListRuntimeNodes, e.useLlmResolveModelRef, e.useLlmSetDefault, e.useLlmStartRuntime, e.useLlmStopRuntime, e.useLlmTestProfile, e.useLlmUpsertProfile, e.useLocalNetworkDownloadCa, e.useLocalNetworkGetAllowedAddresses, e.useLocalNetworkGetConnectionEndpoints, e.useLocalNetworkGetNotificationEndpoint, e.useLocalNetworkGetPreferred, e.useLocalNetworkGetTlsStatus, e.useLocalNetworkGetViewerEndpoints, e.useLocalNetworkList, e.useLocalNetworkRegenerateCertificate, e.useLocalNetworkResetAllowlistToBestMatch, e.useLocalNetworkRevertToGeneratedCertificate, e.useLocalNetworkSetAllowedAddresses, e.useLocalNetworkSetNotificationEndpoint, e.useLocalNetworkSetViewerEndpoints, e.useLocalNetworkUploadCertificate, e.useLockControlGetStatus, e.useLockControlLock, e.useLockControlOpen, e.useLockControlUnlock, e.useMediaPlayerGetStatus, e.useMediaPlayerNext, e.useMediaPlayerPause, e.useMediaPlayerPlay, e.useMediaPlayerPlayMedia, e.useMediaPlayerPrevious, e.useMediaPlayerSeek, e.useMediaPlayerSelectSource, e.useMediaPlayerSetMute, e.useMediaPlayerSetRepeat, e.useMediaPlayerSetShuffle, e.useMediaPlayerSetVolume, e.useMediaPlayerStop, e.useMeshNetworkGetStatus, e.useMeshNetworkJoin, e.useMeshNetworkLeave, e.useMeshNetworkListPeers, e.useMeshNetworkLogout, e.useMeshNetworkStartLogin, e.useMeshNetworkTestConnection, e.useMetricsProviderCollectSnapshot, e.useMetricsProviderDumpHeapSnapshot, e.useMetricsProviderGetAddonStats, e.useMetricsProviderGetCached, e.useMetricsProviderGetCpuTemperature, e.useMetricsProviderGetCurrent, e.useMetricsProviderGetDiskSpace, e.useMetricsProviderGetGpuInfo, e.useMetricsProviderGetProcessStats, e.useMetricsProviderKillProcess, e.useMetricsProviderListAddonInstances, e.useMetricsProviderListNodeProcesses, e.useMotionDetectionAnalyze, e.useMotionDetectionApplyDeviceSettingsPatch, e.useMotionDetectionGetDeviceLiveContribution, e.useMotionDetectionGetDeviceSettingsContribution, e.useMotionDetectionRemoveCamera, e.useMotionDetectionReset, e.useMotionGetStatus, e.useMotionIsDetected, e.useMotionTriggerGetStatus, e.useMotionTriggerSetMotionTrigger, e.useMotionZonesGetOptions, e.useMotionZonesGetStatus, e.useMotionZonesSetZone, e.useMqttBrokerAddBroker, e.useMqttBrokerGetBrokerConfig, e.useMqttBrokerGetStatus, e.useMqttBrokerListBrokers, e.useMqttBrokerRemoveBroker, e.useMqttBrokerStartEmbeddedBroker, e.useMqttBrokerStopEmbeddedBroker, e.useMqttBrokerTestConnection, e.useNativeObjectDetectionGetStatus, e.useNativeObjectDetectionSetEnabled, e.useNetworkAccessGetEndpoint, e.useNetworkAccessGetStatus, e.useNetworkAccessListEndpoints, e.useNetworkAccessStart, e.useNetworkAccessStop, e.useNetworkQualityGetAllStats, e.useNetworkQualityGetDeviceStats, e.useNetworkQualityReportClientStats, e.useNodesClusterAddonStatus, e.useNodesDeployAddon, e.useNodesExecuteQuery, e.useNodesGetCapUsageGraph, e.useNodesGetNodeAddons, e.useNodesRenameNode, e.useNodesRestartAddon, e.useNodesRestartNode, e.useNodesRestartProcess, e.useNodesSetProcessLogLevel, e.useNodesShutdownNode, e.useNodesTopology, e.useNodesUndeployAddon, e.useNotificationOutputDeleteTarget, e.useNotificationOutputDiscoverTargets, e.useNotificationOutputListTargetKinds, e.useNotificationOutputListTargets, e.useNotificationOutputSend, e.useNotificationOutputSetTargetEnabled, e.useNotificationOutputTestTarget, e.useNotificationOutputUpsertTarget, e.useNotificationRulesCancelSnooze, e.useNotificationRulesCreateRule, e.useNotificationRulesCreateSnooze, e.useNotificationRulesDeleteRule, e.useNotificationRulesGetAlarmConfig, e.useNotificationRulesGetConditionCatalog, e.useNotificationRulesGetHistory, e.useNotificationRulesGetRule, e.useNotificationRulesListDeviceMutes, e.useNotificationRulesListRules, e.useNotificationRulesListSnoozes, e.useNotificationRulesSetAlarmConfig, e.useNotificationRulesSetDeviceMuted, e.useNotificationRulesSetRuleEnabled, e.useNotificationRulesTestRule, e.useNotificationRulesUpdateRule, e.useNotifierCancel, e.useNotifierGetStatus, e.useNotifierSend, e.useNumericSensorGetStatus, e.useOptimisticSlice, e.useOptionalSystem, e.useOptionalWidgetRegistry, e.useOsdGetStatus, e.useOsdManagerClearSlotBinding, e.useOsdManagerCopyDeviceConfiguration, e.useOsdManagerGetConditionSupport, e.useOsdManagerGetDeviceOsd, e.useOsdManagerGetSourceCatalog, e.useOsdManagerPreviewSlot, e.useOsdManagerRenderDevice, e.useOsdManagerSetSlotBinding, e.useOsdSetOverlay, e.usePTZ, e.usePetFeederCallPet, e.usePetFeederCancelFeed, e.usePetFeederFeed, e.usePetFeederGetStatus, e.usePetFeederMarkFoodReplenished, e.usePetFeederPlaySound, e.usePetFeederResetDesiccant, e.usePetFeederSetChildLock, e.usePetFeederSetFeedSound, e.usePetFeederSetIndicatorLight, e.usePetFeederSetVolume, e.usePipelineAnalyticsApplyDeviceSettingsPatch, e.usePipelineAnalyticsCancelStorageMigrationMove, e.usePipelineAnalyticsClearTracks, e.usePipelineAnalyticsCompleteRetrainTrack, e.usePipelineAnalyticsDeleteDeviceEvents, e.usePipelineAnalyticsDeleteTracks, e.usePipelineAnalyticsDeselectRetrainFrame, e.usePipelineAnalyticsGetActiveTracks, e.usePipelineAnalyticsGetAudioEvents, e.usePipelineAnalyticsGetDeviceLiveContribution, e.usePipelineAnalyticsGetDeviceSettingsContribution, e.usePipelineAnalyticsGetEventDensity, e.usePipelineAnalyticsGetEventMedia, e.usePipelineAnalyticsGetEventStoreFootprint, e.usePipelineAnalyticsGetGroup, e.usePipelineAnalyticsGetKeyEvents, e.usePipelineAnalyticsGetMotionEvents, e.usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, e.usePipelineAnalyticsGetObjectEvents, e.usePipelineAnalyticsGetRetrainExportUrl, e.usePipelineAnalyticsGetRetrainFrameImage, e.usePipelineAnalyticsGetSensorEvents, e.usePipelineAnalyticsGetStorageMigrationMoveStatus, e.usePipelineAnalyticsGetTrack, e.usePipelineAnalyticsGetTrackMedia, e.usePipelineAnalyticsGetTrainingExportSummary, e.usePipelineAnalyticsGetTrainingExportUrl, e.usePipelineAnalyticsListEventKinds, e.usePipelineAnalyticsListEventKindsBatch, e.usePipelineAnalyticsListGroups, e.usePipelineAnalyticsListOpsLog, e.usePipelineAnalyticsListRecentTracks, e.usePipelineAnalyticsListRetrainAnnotations, e.usePipelineAnalyticsListRetrainFrames, e.usePipelineAnalyticsListRetrainStaging, e.usePipelineAnalyticsListTrackMedia, e.usePipelineAnalyticsListTracks, e.usePipelineAnalyticsPauseForStorageMigration, e.usePipelineAnalyticsProposeRetrainAnnotations, e.usePipelineAnalyticsPruneEvents, e.usePipelineAnalyticsPruneEventsBefore, e.usePipelineAnalyticsPruneTracksBefore, e.usePipelineAnalyticsRebuildObjectEmbeddings, e.usePipelineAnalyticsReconcileFromDisk, e.usePipelineAnalyticsRefreshStorageLocationsForMigration, e.usePipelineAnalyticsRestageRetrainTrack, e.usePipelineAnalyticsResumeForStorageMigration, e.usePipelineAnalyticsSaveRetrainAnnotations, e.usePipelineAnalyticsSearchObjectEvents, e.usePipelineAnalyticsSelectRetrainFrames, e.usePipelineAnalyticsSetTrackFlags, e.usePipelineAnalyticsStartStorageMigrationMove, e.usePipelineAnalyticsWipeAllAnalytics, e.usePipelineAnalyticsWipeObjectEmbeddings, e.usePipelineExecutorCacheFrameInPool, e.usePipelineExecutorClearDeviceOverrides, e.usePipelineExecutorDeleteModel, e.usePipelineExecutorDeleteTemplate, e.usePipelineExecutorDownloadModel, e.usePipelineExecutorGetAddonModels, e.usePipelineExecutorGetAudioCapabilities, e.usePipelineExecutorGetAvailableEngines, e.usePipelineExecutorGetCapabilities, e.usePipelineExecutorGetDefaultSteps, e.usePipelineExecutorGetDetectionConfigSchema, e.usePipelineExecutorGetEffectiveTuning, e.usePipelineExecutorGetEngineProvisioning, e.usePipelineExecutorGetGlobalPipelineConfig, e.usePipelineExecutorGetGlobalSteps, e.usePipelineExecutorGetOrchestratorConfigSchema, e.usePipelineExecutorGetReferenceAudio, e.usePipelineExecutorGetReferenceAudioFiles, e.usePipelineExecutorGetReferenceImage, e.usePipelineExecutorGetSchema, e.usePipelineExecutorGetSelectedEngine, e.usePipelineExecutorGetVideoPipelineSteps, e.usePipelineExecutorInferCached, e.usePipelineExecutorKillEngine, e.usePipelineExecutorListLoadedEngines, e.usePipelineExecutorListReferenceImages, e.usePipelineExecutorListTemplates, e.usePipelineExecutorRunAudioTest, e.usePipelineExecutorRunPipeline, e.usePipelineExecutorRunPipelineBatch, e.usePipelineExecutorSaveTemplate, e.usePipelineExecutorSetVideoPipelineSteps, e.usePipelineExecutorSpinEngine, e.usePipelineExecutorUncacheFrame, e.usePipelineExecutorUpdateTemplate, e.usePipelineExecutorValidatePipeline, e.usePipelineOrchestratorApplyDeviceSettingsPatch, e.usePipelineOrchestratorAssignAudio, e.usePipelineOrchestratorAssignPipeline, e.usePipelineOrchestratorDeleteTemplate, e.usePipelineOrchestratorGetAgentLoad, e.usePipelineOrchestratorGetAgentSettings, e.usePipelineOrchestratorGetAudioAssignment, e.usePipelineOrchestratorGetAudioAssignments, e.usePipelineOrchestratorGetAudioNodeLoad, e.usePipelineOrchestratorGetCameraMetrics, e.usePipelineOrchestratorGetCameraSettings, e.usePipelineOrchestratorGetCameraStatus, e.usePipelineOrchestratorGetCameraStatuses, e.usePipelineOrchestratorGetCameraStepOverrides, e.usePipelineOrchestratorGetCameraSwitches, e.usePipelineOrchestratorGetCapabilityBindings, e.usePipelineOrchestratorGetDeviceLiveContribution, e.usePipelineOrchestratorGetDeviceSettingsContribution, e.usePipelineOrchestratorGetGlobalMetrics, e.usePipelineOrchestratorGetIngestOwner, e.usePipelineOrchestratorGetNodeInferenceDevices, e.usePipelineOrchestratorGetPipelineAssignment, e.usePipelineOrchestratorGetPipelineAssignments, e.usePipelineOrchestratorGetPipelineDevicePin, e.usePipelineOrchestratorGetReconcileFromDiskStatus, e.usePipelineOrchestratorListAgentSettings, e.usePipelineOrchestratorListTemplates, e.usePipelineOrchestratorPauseForStorageMigration, e.usePipelineOrchestratorRebalance, e.usePipelineOrchestratorReconcileFromDisk, e.usePipelineOrchestratorRemoveAgentSettings, e.usePipelineOrchestratorResetNodePipelineDefaults, e.usePipelineOrchestratorResolvePipeline, e.usePipelineOrchestratorResumeForStorageMigration, e.usePipelineOrchestratorSaveTemplate, e.usePipelineOrchestratorSetAgentCapabilities, e.usePipelineOrchestratorSetAgentDetectWeight, e.usePipelineOrchestratorSetAgentInferenceDevices, e.usePipelineOrchestratorSetAgentMaxCameras, e.usePipelineOrchestratorSetAgentReachableHost, e.usePipelineOrchestratorSetCameraPipelineForAgent, e.usePipelineOrchestratorSetCameraStepOverride, e.usePipelineOrchestratorSetCameraStepToggle, e.usePipelineOrchestratorSetCameraSwitch, e.usePipelineOrchestratorSetCapabilityBinding, e.usePipelineOrchestratorSetPipelineDevicePin, e.usePipelineOrchestratorUnassignAudio, e.usePipelineOrchestratorUnassignPipeline, e.usePipelineOrchestratorUpdateTemplate, e.usePipelineRunnerAttachCamera, e.usePipelineRunnerDetachCamera, e.usePipelineRunnerGetAllCameraMetrics, e.usePipelineRunnerGetCameraMetrics, e.usePipelineRunnerGetLocalCameras, e.usePipelineRunnerGetLocalLoad, e.usePipelineRunnerGetLocalMetrics, e.usePipelineRunnerGetNativeCrop, e.usePipelineRunnerReportMotion, e.usePipelineRunnerRunDetailSubtree, e.usePipelineRunnerRunStatelessStep, e.usePlateGalleryAssignPlate, e.usePlateGalleryAssignPlates, e.usePlateGalleryCorrectPlateText, e.usePlateGalleryCreateVehicle, e.usePlateGalleryDeletePlate, e.usePlateGalleryDeleteVehicle, e.usePlateGalleryGetPlateByTrack, e.usePlateGalleryGetPlateMedia, e.usePlateGalleryListPlates, e.usePlateGalleryListVehicleSamples, e.usePlateGalleryListVehicles, e.usePlateGalleryRemoveVehicleSample, e.usePlateGalleryRenameVehicle, e.usePlateGallerySearchPlates, e.usePlateGallerySuggestPlateClusters, e.usePlateGalleryUnassignPlate, e.usePlateGalleryUnassignPlates, e.usePlayerOverlayLayer, e.usePlayerOverlayLayers, e.usePlayerToolbarButton, e.usePlayerToolbarButtons, e.usePowerMeterGetStatus, e.usePresenceGetStatus, e.usePressureSensorGetStatus, e.usePrivacyMaskGetOptions, e.usePrivacyMaskGetStatus, e.usePrivacyMaskSetAudioEnabled, e.usePrivacyMaskSetMask, e.usePtzAutotrackGetSettings, e.usePtzAutotrackGetStatus, e.usePtzAutotrackSetEnabled, e.usePtzAutotrackSetSettings, e.usePtzContinuousMove, e.usePtzDeletePreset, e.usePtzGetOptions, e.usePtzGetPosition, e.usePtzGetPresets, e.usePtzGetStatus, e.usePtzGoHome, e.usePtzGoToPreset, e.usePtzMove, e.usePtzSavePreset, e.usePtzSetAutofocus, e.usePtzStop, e.useRebootReboot, e.useRecordedPlayback, e.useRecordingApplyDeviceSettingsPatch, e.useRecordingCancelRelocateJob, e.useRecordingCancelStorageMigrationMove, e.useRecordingDeleteFootprint, e.useRecordingExportCancelExport, e.useRecordingExportCreateExport, e.useRecordingExportDeleteExport, e.useRecordingExportGetDownloadUrl, e.useRecordingExportGetExport, e.useRecordingExportListExports, e.useRecordingExportReadExportBytes, e.useRecordingGetAvailability, e.useRecordingGetDaysWithRecordings, e.useRecordingGetDeviceConfig, e.useRecordingGetDeviceLiveContribution, e.useRecordingGetDeviceSettingsContribution, e.useRecordingGetPlaybackManifest, e.useRecordingGetStatus, e.useRecordingGetStorageMigrationMoveStatus, e.useRecordingGetStorageUsage, e.useRecordingListOpsLog, e.useRecordingListRelocateJobs, e.useRecordingLocateSegment, e.useRecordingPauseForStorageMigration, e.useRecordingPlanStorageRebalance, e.useRecordingPruneFootage, e.useRecordingReadGopBytes, e.useRecordingReadSegmentBytes, e.useRecordingRefreshStorageLocationsForMigration, e.useRecordingRelocateFootage, e.useRecordingRenderClip, e.useRecordingRenderGif, e.useRecordingRescanStorage, e.useRecordingResumeForStorageMigration, e.useRecordingSetDeviceConfig, e.useRecordingStartStorageMigrationMove, e.useRecordingStartStorageRebalance, e.useRemoteComponent, e.useSceneMonitorCaptureReference, e.useSceneMonitorCreateScene, e.useSceneMonitorDeleteReference, e.useSceneMonitorDeleteScene, e.useSceneMonitorGetStatus, e.useSceneMonitorListScenes, e.useSceneMonitorRecheckNow, e.useSceneMonitorResetScene, e.useSceneMonitorUpdateScene, e.useScriptRunnerGetStatus, e.useScriptRunnerRun, e.useScriptRunnerStop, e.useScrubController, e.useServerManagementApplyServerUpdate, e.useServerManagementCheckServerUpdate, e.useServerManagementGetServerPackageStatus, e.useServerManagementRestartServer, e.useServerManagementRollbackServerUpdate, e.useSettingsStoreCount, e.useSettingsStoreDeclareCollection, e.useSettingsStoreDelete, e.useSettingsStoreDeleteWhere, e.useSettingsStoreGet, e.useSettingsStoreHistogram, e.useSettingsStoreInsert, e.useSettingsStoreIsEmpty, e.useSettingsStoreQuery, e.useSettingsStoreSet, e.useSettingsStoreUpdate, e.useSettingsStoreUpdateWhere, e.useSmokeGetStatus, e.useSnapshotApplyDeviceSettingsPatch, e.useSnapshotGetDebugState, e.useSnapshotGetDeviceLiveContribution, e.useSnapshotGetDeviceSettingsContribution, e.useSnapshotGetSnapshot, e.useSnapshotGetSnapshotLinks, e.useSnapshotGetSnapshotOverview, e.useSnapshotGetStatus, e.useSnapshotInvalidateCache, e.useStorageAbortUpload, e.useStorageBeginDownload, e.useStorageBeginUpload, e.useStorageDelete, e.useStorageDeleteLocation, e.useStorageEndDownload, e.useStorageExists, e.useStorageFinalizeUpload, e.useStorageGetAvailableSpace, e.useStorageGetDefaultLocation, e.useStorageList, e.useStorageListLocationDeclarations, e.useStorageListLocations, e.useStorageListProviders, e.useStorageMigrationCancel, e.useStorageMigrationPlan, e.useStorageMigrationStart, e.useStorageMigrationStatus, e.useStorageRead, e.useStorageReadChunk, e.useStorageResolve, e.useStorageTestConfig, e.useStorageTestLocation, e.useStorageUpsertLocation, e.useStorageWrite, e.useStorageWriteChunk, e.useStreamBrokerAcquireEgressTranscode, e.useStreamBrokerApplyDeviceSettingsPatch, e.useStreamBrokerAssignProfile, e.useStreamBrokerFetchEventMedia, e.useStreamBrokerGetAllRtspEntries, e.useStreamBrokerGetBrokerStats, e.useStreamBrokerGetDeviceAudioMute, e.useStreamBrokerGetDeviceLiveContribution, e.useStreamBrokerGetDeviceSettingsContribution, e.useStreamBrokerGetPreBufferInfo, e.useStreamBrokerGetRtspEntry, e.useStreamBrokerGetRtspPort, e.useStreamBrokerGetStreamUrl, e.useStreamBrokerGetStreamWithCodec, e.useStreamBrokerIsRtspEnabled, e.useStreamBrokerKillClient, e.useStreamBrokerListAllCameraStreams, e.useStreamBrokerListAllProfileSlots, e.useStreamBrokerListClients, e.useStreamBrokerProbeStream, e.useStreamBrokerProduceEventMedia, e.useStreamBrokerPublishCameraStream, e.useStreamBrokerPullAudioChunks, e.useStreamBrokerPullFrameHandles, e.useStreamBrokerRegenerateRtspToken, e.useStreamBrokerReleaseEgressTranscode, e.useStreamBrokerReleaseStreamWithCodec, e.useStreamBrokerRenderPreBufferClip, e.useStreamBrokerRestartProfile, e.useStreamBrokerRetractCameraStream, e.useStreamBrokerSetDeviceAudioMute, e.useStreamBrokerSetPreBufferDuration, e.useStreamBrokerSetRtspEnabled, e.useStreamBrokerSubscribeAudioChunks, e.useStreamBrokerSubscribeFrames, e.useStreamBrokerUnassignProfile, e.useStreamBrokerUnsubscribeAudioChunks, e.useStreamBrokerUnsubscribeFrames, e.useStreamCatalogGetCatalog, e.useStreamParamsGetConfigSchema, e.useStreamParamsGetOptions, e.useStreamParamsGetStatus, e.useStreamParamsSetProfile, e.useSwitchGetStatus, e.useSwitchSetState, d = e.useSystem, e.useSystem$1, e.useSystemDetectSiteLocation, e.useSystemFeatureFlags, e.useSystemForceRetentionCleanup, e.useSystemGetRetentionConfig, e.useSystemGetSiteLocation, e.useSystemHealth, e.useSystemInfo, e.useSystemMutation, e.useSystemNetworkAddresses, e.useSystemQuery, e.useSystemSetRetentionConfig, e.useSystemSetSiteLocation, e.useTamperGetStatus, e.useTemperatureSensorGetStatus, e.useTerminalSessionAdoptLegacyMonitor, e.useTerminalSessionClose, e.useTerminalSessionCreateInstance, e.useTerminalSessionDeleteInstance, e.useTerminalSessionListInstances, e.useTerminalSessionListLegacyCameras, e.useTerminalSessionListProfiles, e.useTerminalSessionListSessions, e.useTerminalSessionOpenSession, e.useTerminalSessionPullOutput, e.useTerminalSessionResize, e.useTerminalSessionSetInstanceEnabled, e.useTerminalSessionUpdateInstance, e.useTerminalSessionWriteInput, e.useThemeMode, e.useToastOnToast, e.useTurnProviderGetTurnServers, e.useUpdateGetStatus, e.useUpdateInstallUpdate, e.useUserManagementConfirmTotp, e.useUserManagementCreateApiKey, e.useUserManagementCreateScopedToken, e.useUserManagementCreateUser, e.useUserManagementDeleteUser, e.useUserManagementDisableTotp, e.useUserManagementGetTotpStatus, e.useUserManagementListApiKeys, e.useUserManagementListOauthSessions, e.useUserManagementListScopedTokens, e.useUserManagementListUsers, e.useUserManagementOauthExchangeCode, e.useUserManagementOauthIssueCode, e.useUserManagementOauthRefresh, e.useUserManagementOauthVerifyAccessToken, e.useUserManagementResetPassword, e.useUserManagementRevokeApiKey, e.useUserManagementRevokeOauthSession, e.useUserManagementRevokeScopedToken, e.useUserManagementSetUserScopes, e.useUserManagementSetupTotp, e.useUserManagementUpdateUser, e.useUserManagementValidateApiKey, e.useUserManagementValidateCredentials, e.useUserManagementValidateScopedToken, e.useUserManagementVerifyTotp, e.useVacuumControlGetStatus, e.useVacuumControlLocate, e.useVacuumControlPause, e.useVacuumControlReturnToBase, e.useVacuumControlSetFanSpeed, e.useVacuumControlStart, e.useVacuumControlStop, e.useValveClose, e.useValveGetStatus, e.useValveOpen, e.useValveSetPosition, e.useValveStop, e.useVibrationGetStatus, e.useVideoclipsGetClipPlayback, e.useVideoclipsListClips, e.useVodPlayback, e.useWaterHeaterGetStatus, e.useWaterHeaterSetAway, e.useWaterHeaterSetOperationMode, e.useWaterHeaterSetTargetTemp, e.useWeatherGetStatus, e.useWebrtcSessionAddIceCandidate, e.useWebrtcSessionCloseSession, e.useWebrtcSessionCreateSession, e.useWebrtcSessionGetIceCandidates, e.useWebrtcSessionGetSessionState, e.useWebrtcSessionHandleAnswer, e.useWebrtcSessionHandleOffer, e.useWebrtcSessionHasAdaptiveBitrate, e.useWebrtcSessionListStreams, e.useWidget, e.useWidgetMetadata, e.useWidgetRegistry, e.useZoneAnalyticsGetCameraHistory, e.useZoneAnalyticsGetCurrentSnapshot, e.useZoneAnalyticsGetUnzonedHistory, e.useZoneAnalyticsGetZoneHistory, e.useZoneEditing, e.useZoneRulesListRules, e.useZoneRulesSetRules, e.useZonesAddZone, e.useZonesListZones, e.useZonesRemoveZone, e.useZonesUpdateZone, e.vacuumStateMeta, e.validateScopes, e.valveStateMeta, e.variantLabel, e.variantLabel$1, e.waterHeaterPhase, e.waterHeaterTint, e.weatherConditionMeta, e.weatherTint, e.default;
|
|
20
|
-
}, p = i.share["default:@camstack/ui-library"];
|
|
21
|
-
p === void 0 ? n.then(() => {
|
|
22
|
-
if (p = i.share["default:@camstack/ui-library"], p === void 0) throw Error("[Module Federation] Shared module @camstack/ui-library was imported before federation bootstrap finished.");
|
|
23
|
-
f(p);
|
|
24
|
-
}) : f(p);
|
|
25
|
-
//#endregion
|
|
26
|
-
export { c as a, s as i, d as n, l as o, o as r, u as s, a as t };
|