@camstack/addon-post-analysis 1.2.68 → 1.2.70
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-rpHe5qpB.mjs → dist-6T-F0YJO.mjs} +790 -80
- package/dist/{dist-Dl1kEFqi.js → dist-DnpVHUcH.js} +819 -79
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DgDC53Dh.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Cxzt8LHT.mjs} +3 -3
- package/dist/pipeline-analytics/{hostInit-GicJZVng.mjs → hostInit-DW1qt-In.mjs} +3 -3
- package/dist/pipeline-analytics/index.js +6145 -3524
- package/dist/pipeline-analytics/index.mjs +6142 -3521
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -10990,7 +10990,14 @@ var cameraStreamsCapability = {
|
|
|
10990
10990
|
low: string().optional()
|
|
10991
10991
|
}),
|
|
10992
10992
|
lastChangedAt: number()
|
|
10993
|
-
})
|
|
10993
|
+
}),
|
|
10994
|
+
/**
|
|
10995
|
+
* Runtime-state durability: **session** — a restored `slotStatuses: streaming` for a camera that has been dark for two hours is a lie the UI renders as truth.
|
|
10996
|
+
*
|
|
10997
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
10998
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
10999
|
+
*/
|
|
11000
|
+
durability: "session"
|
|
10994
11001
|
};
|
|
10995
11002
|
/** kebab-case cap name → camelCase router-map key. */
|
|
10996
11003
|
function kebabToCamel(s) {
|
|
@@ -11577,6 +11584,13 @@ var deviceDiscoveryCapability = {
|
|
|
11577
11584
|
kind: "poll"
|
|
11578
11585
|
},
|
|
11579
11586
|
runtimeState: DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int().nonnegative() }),
|
|
11587
|
+
/**
|
|
11588
|
+
* Runtime-state durability: **session** — 5.7 KB of scan output on the largest device, fully re-derivable by re-scanning.
|
|
11589
|
+
*
|
|
11590
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
11591
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
11592
|
+
*/
|
|
11593
|
+
durability: "session",
|
|
11580
11594
|
methods: {
|
|
11581
11595
|
/**
|
|
11582
11596
|
* Snapshot of the current `discovered` list. Returns the
|
|
@@ -13401,11 +13415,33 @@ var NotificationFormatSchema = _enum([
|
|
|
13401
13415
|
* Named by INTENT, never by glyph. "check" would tie the vocabulary to one
|
|
13402
13416
|
* renderer's icon set; "acknowledge" survives an adapter that draws it
|
|
13403
13417
|
* differently.
|
|
13418
|
+
*
|
|
13419
|
+
* ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
|
|
13420
|
+
*
|
|
13421
|
+
* These names are for US. **No adapter may forward one verbatim.** Each maps
|
|
13422
|
+
* the whole set onto its own renderer's vocabulary through a
|
|
13423
|
+
* `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
|
|
13424
|
+
* fallback, so adding a member here fails every adapter's build until someone
|
|
13425
|
+
* decides its glyph, which is the only place that decision can be made
|
|
13426
|
+
* honestly.
|
|
13427
|
+
*
|
|
13428
|
+
* This paragraph is the bug. Zentik declared `actionIcons: true` and passed
|
|
13429
|
+
* `disarm` straight through; iOS feeds that string to
|
|
13430
|
+
* `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
|
|
13431
|
+
* and every snooze and alarm button arrived BLANK. A pass-through is not a
|
|
13432
|
+
* mapping, and "the field is documented" is not "the value renders".
|
|
13433
|
+
*
|
|
13434
|
+
* Adding a member is TRAIN-BOUND. The enum lives in the published
|
|
13435
|
+
* `@camstack/server` closure and the cap seam validates against the HUB's copy,
|
|
13436
|
+
* so an addon that emits a token the running hub does not know does not lose an
|
|
13437
|
+
* icon — its whole `send` fails Zod validation and the notification never
|
|
13438
|
+
* arrives. Never emit a new token from an addon before the train carrying it.
|
|
13404
13439
|
*/
|
|
13405
13440
|
var NotificationActionIconSchema = _enum([
|
|
13406
13441
|
"acknowledge",
|
|
13407
13442
|
"dismiss",
|
|
13408
13443
|
"silence",
|
|
13444
|
+
"snooze",
|
|
13409
13445
|
"view",
|
|
13410
13446
|
"play",
|
|
13411
13447
|
"open",
|
|
@@ -13413,9 +13449,13 @@ var NotificationActionIconSchema = _enum([
|
|
|
13413
13449
|
"lock",
|
|
13414
13450
|
"unlock",
|
|
13415
13451
|
"arm",
|
|
13452
|
+
"arm-home",
|
|
13453
|
+
"arm-away",
|
|
13454
|
+
"arm-night",
|
|
13416
13455
|
"disarm",
|
|
13417
13456
|
"light",
|
|
13418
|
-
"alert"
|
|
13457
|
+
"alert",
|
|
13458
|
+
"camera"
|
|
13419
13459
|
]);
|
|
13420
13460
|
/** A single tap-through action button. */
|
|
13421
13461
|
var NotificationActionSchema = object({
|
|
@@ -13431,7 +13471,23 @@ var NotificationActionSchema = object({
|
|
|
13431
13471
|
* else — see `notification-center/action-token.ts` for what that does and
|
|
13432
13472
|
* does not buy.
|
|
13433
13473
|
*/
|
|
13434
|
-
destructive: boolean().optional()
|
|
13474
|
+
destructive: boolean().optional(),
|
|
13475
|
+
/**
|
|
13476
|
+
* How the tap should REACH the url.
|
|
13477
|
+
*
|
|
13478
|
+
* `navigate` (absent, and every button authored before this field) opens it:
|
|
13479
|
+
* the phone leaves the notification and shows whatever the callback returns.
|
|
13480
|
+
* That is right for a button whose answer the operator wants to read.
|
|
13481
|
+
*
|
|
13482
|
+
* `background` fires it as a POST and stays put. It exists for the buttons
|
|
13483
|
+
* whose whole point is not to interrupt — "silence this for 30 minutes" is
|
|
13484
|
+
* an answer to the notification, and being thrown into a browser tab to
|
|
13485
|
+
* confirm it costs more attention than the notification did. A backend that
|
|
13486
|
+
* cannot do a background call renders it as an ordinary link (the adapters
|
|
13487
|
+
* fall back rather than dropping the button), so this is a preference, never
|
|
13488
|
+
* a requirement.
|
|
13489
|
+
*/
|
|
13490
|
+
mode: _enum(["navigate", "background"]).optional()
|
|
13435
13491
|
});
|
|
13436
13492
|
/**
|
|
13437
13493
|
* The canonical notification. `body` is the only hard field (Apprise model).
|
|
@@ -13617,6 +13673,29 @@ var MACRO_LABELS = [
|
|
|
13617
13673
|
name: "Package"
|
|
13618
13674
|
}
|
|
13619
13675
|
];
|
|
13676
|
+
/**
|
|
13677
|
+
* The class names a per-class COUNT can ever be keyed on — the macro ids, and
|
|
13678
|
+
* only those.
|
|
13679
|
+
*
|
|
13680
|
+
* `preserveOriginal: false` below is the whole reason this set exists: the
|
|
13681
|
+
* executor maps each raw COCO label onto its macro and DROPS everything else,
|
|
13682
|
+
* so a tracked detection's `className` is always one of {@link MACRO_LABELS}.
|
|
13683
|
+
* Any surface that indexes counts by class name — the ZoneAnalytics occupancy
|
|
13684
|
+
* snapshot's `byClass`, and therefore every occupancy rule — can match nothing
|
|
13685
|
+
* else. Derived from the catalog, never hand-listed, so a new macro joins it by
|
|
13686
|
+
* being declared once.
|
|
13687
|
+
*
|
|
13688
|
+
* Cost of not having it, 2026-08-12: the notification rule editor offered the
|
|
13689
|
+
* full taxonomy for an occupancy class (occupancy is the one condition that
|
|
13690
|
+
* does not go through the engine's macro-expanding `expandClassSelector`), two
|
|
13691
|
+
* live rules were authored on `car`, and both counters read 0 forever.
|
|
13692
|
+
*/
|
|
13693
|
+
var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
|
|
13694
|
+
/** True when `className` is a macro the detector can actually emit (and hence a
|
|
13695
|
+
* class a count can be keyed on) — see {@link DETECTION_MACRO_CLASSES}. */
|
|
13696
|
+
function isDetectionMacroClass(className) {
|
|
13697
|
+
return DETECTION_MACRO_CLASSES.has(className.trim().toLowerCase());
|
|
13698
|
+
}
|
|
13620
13699
|
var COCO_TO_MACRO = {
|
|
13621
13700
|
mapping: {
|
|
13622
13701
|
person: "person",
|
|
@@ -14310,7 +14389,17 @@ var alarmPanelCapability = {
|
|
|
14310
14389
|
* full slice; renders an arm button per `availableModes` entry and
|
|
14311
14390
|
* a PIN field iff `requiresCode === true`.
|
|
14312
14391
|
*/
|
|
14313
|
-
runtimeState: AlarmPanelStatusSchema
|
|
14392
|
+
runtimeState: AlarmPanelStatusSchema,
|
|
14393
|
+
/**
|
|
14394
|
+
* Runtime-state durability: **restored** — armed state is the one thing a panel must not lose across a restart.
|
|
14395
|
+
*
|
|
14396
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
14397
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
14398
|
+
*/
|
|
14399
|
+
durability: "restored",
|
|
14400
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
14401
|
+
* whether persisting is worth a SQLite commit. */
|
|
14402
|
+
volatileStateFields: ["lastChangedAt"]
|
|
14314
14403
|
};
|
|
14315
14404
|
/**
|
|
14316
14405
|
* Shared geometry vocabulary for on-frame shape caps — privacy-mask,
|
|
@@ -14451,6 +14540,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
14451
14540
|
"alarm-triggered",
|
|
14452
14541
|
"alarm-armed",
|
|
14453
14542
|
"alarm-disarmed",
|
|
14543
|
+
"alarm-arming",
|
|
14544
|
+
"alarm-arm-refused",
|
|
14454
14545
|
"camera-online",
|
|
14455
14546
|
"camera-offline",
|
|
14456
14547
|
"camera-disabled",
|
|
@@ -14465,6 +14556,25 @@ var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
|
|
|
14465
14556
|
]);
|
|
14466
14557
|
NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
|
|
14467
14558
|
/**
|
|
14559
|
+
* The panel's transitions, as ONE list.
|
|
14560
|
+
*
|
|
14561
|
+
* Named here rather than spelled out at each of the four sites that need them
|
|
14562
|
+
* (the emitter, the intake, the editor group, the combined-notification gate),
|
|
14563
|
+
* because a transition added to the enum and forgotten at one of them is an
|
|
14564
|
+
* alarm state nobody can be notified about. That is exactly what this list
|
|
14565
|
+
* failed to prevent while it held three: `alarm-arming` was the fourth.
|
|
14566
|
+
*
|
|
14567
|
+
* In LIFECYCLE order, which is the order an editor lists them in and the order
|
|
14568
|
+
* a person experiences them — not the order they were added.
|
|
14569
|
+
*/
|
|
14570
|
+
var NC_ALARM_SYSTEM_EVENT_KINDS = [
|
|
14571
|
+
"alarm-arm-refused",
|
|
14572
|
+
"alarm-arming",
|
|
14573
|
+
"alarm-armed",
|
|
14574
|
+
"alarm-triggered",
|
|
14575
|
+
"alarm-disarmed"
|
|
14576
|
+
];
|
|
14577
|
+
/**
|
|
14468
14578
|
* One coherent system-event condition. `kinds` is the required opt-in safety
|
|
14469
14579
|
* gate; the remaining lists are optional narrowing filters relevant to the
|
|
14470
14580
|
* selected kinds.
|
|
@@ -14487,6 +14597,26 @@ var NcSystemEventConditionSchema = object({
|
|
|
14487
14597
|
nodeIds: array(string().min(1)).min(1).optional(),
|
|
14488
14598
|
packageNames: array(string().min(1)).min(1).optional()
|
|
14489
14599
|
});
|
|
14600
|
+
/** Hard ceiling on a window (24h). A snooze that could not expire would be an
|
|
14601
|
+
* outage the operator asked for once and forgot. */
|
|
14602
|
+
var NC_SNOOZE_MAX_MINUTES = 1440;
|
|
14603
|
+
/**
|
|
14604
|
+
* The durations a notification offers when its rule does not say otherwise.
|
|
14605
|
+
*
|
|
14606
|
+
* MINUTES, and short ones: a snooze button is answered on a lock screen, and
|
|
14607
|
+
* the three choices that fit there are "the next few minutes", "the next half
|
|
14608
|
+
* hour" and "the next hour". Anything longer is a decision somebody sits down
|
|
14609
|
+
* to make, which is what the app's own snooze surface is for.
|
|
14610
|
+
*
|
|
14611
|
+
* Resolved in CODE (`snoozeChoices`), never as a Zod default — see
|
|
14612
|
+
* {@link NcRuleInputSchema.shape.snoozeOptions} for why the distinction is
|
|
14613
|
+
* load-bearing.
|
|
14614
|
+
*/
|
|
14615
|
+
var NC_DEFAULT_SNOOZE_MINUTES = [
|
|
14616
|
+
10,
|
|
14617
|
+
30,
|
|
14618
|
+
60
|
|
14619
|
+
];
|
|
14490
14620
|
/** Weekly schedule — OR of windows; absence on the rule = always active. */
|
|
14491
14621
|
var NcScheduleSchema = object({
|
|
14492
14622
|
windows: array(object({
|
|
@@ -14863,15 +14993,15 @@ var NcConditionsSchema = object({
|
|
|
14863
14993
|
* (an `immediate` rule naming an `audio-*` class, one notification per
|
|
14864
14994
|
* classified sample) stays exactly as it was for rules that already use it.
|
|
14865
14995
|
*
|
|
14866
|
-
*
|
|
14867
|
-
* rather than an
|
|
14868
|
-
* (`camstack/src/data/notification-center.ts`, guarded by
|
|
14869
|
-
* `scripts/check-viewer-condition-mirror.ts`) and its rule editor
|
|
14996
|
+
* In {@link NC_CONDITION_CATALOG} since P2, and the ORDER it got there is the
|
|
14997
|
+
* rule rather than an accident: the viewer mirrors the descriptor enums BY
|
|
14998
|
+
* HAND (`camstack/src/data/notification-center.ts`, guarded by
|
|
14999
|
+
* `scripts/check-viewer-condition-mirror.ts`) and its rule editor strips the
|
|
14870
15000
|
* condition fields it does not know when a rule is saved from the phone.
|
|
14871
15001
|
* Publishing an editor for a condition the app cannot round-trip is how an
|
|
14872
|
-
* operator loses a rule's conditions by opening it — so the
|
|
14873
|
-
*
|
|
14874
|
-
*
|
|
15002
|
+
* operator loses a rule's conditions by opening it — so the viewer mirror
|
|
15003
|
+
* (P3, shipped) went FIRST, and the descriptor an editor renders from
|
|
15004
|
+
* follows here.
|
|
14875
15005
|
*/
|
|
14876
15006
|
audio: NcAudioConditionSchema.optional()
|
|
14877
15007
|
});
|
|
@@ -15107,6 +15237,30 @@ var NcRuleInputSchema = object({
|
|
|
15107
15237
|
*/
|
|
15108
15238
|
snoozeAllowGlobal: boolean().optional(),
|
|
15109
15239
|
/**
|
|
15240
|
+
* The snooze durations THIS rule's notification offers as buttons, in
|
|
15241
|
+
* minutes.
|
|
15242
|
+
*
|
|
15243
|
+
* Three states, and all three are distinct — which is exactly why this is
|
|
15244
|
+
* `.optional()` and never `.default()`. A Zod default does not run on the
|
|
15245
|
+
* addon cap path (three production failures in one day), so a schema default
|
|
15246
|
+
* would collapse the first two:
|
|
15247
|
+
*
|
|
15248
|
+
* | value | meaning |
|
|
15249
|
+
* | --- | --- |
|
|
15250
|
+
* | absent | the operator never said ⇒ {@link NC_DEFAULT_SNOOZE_MINUTES} |
|
|
15251
|
+
* | `[]` | **no snooze buttons on this rule** — the explicit override |
|
|
15252
|
+
* | a list | these choices, de-duplicated and sorted, at most four |
|
|
15253
|
+
*
|
|
15254
|
+
* `.max(4)` because the notifier's own action budget is small (ntfy allows
|
|
15255
|
+
* three buttons in total) and a rule that spent it all on snooze choices
|
|
15256
|
+
* would push its own tap-through actions off the notification.
|
|
15257
|
+
*
|
|
15258
|
+
* An empty list is NOT an alarm exemption: a rule the alarm is about, or
|
|
15259
|
+
* that arms the panel, is exempt automatically and cannot be silenced by a
|
|
15260
|
+
* window from anywhere (D133).
|
|
15261
|
+
*/
|
|
15262
|
+
snoozeOptions: array(number().int().min(1).max(NC_SNOOZE_MAX_MINUTES)).max(4).optional(),
|
|
15263
|
+
/**
|
|
15110
15264
|
* Devices this rule ACTUATES — arm the alarm, open a gate, turn on a light.
|
|
15111
15265
|
*
|
|
15112
15266
|
* This is what makes the rule set the alarm's trigger set without the alarm
|
|
@@ -15206,6 +15360,7 @@ var NcConditionDescriptorSchema = object({
|
|
|
15206
15360
|
"device",
|
|
15207
15361
|
"package",
|
|
15208
15362
|
"occupancy",
|
|
15363
|
+
"audio",
|
|
15209
15364
|
"system"
|
|
15210
15365
|
]),
|
|
15211
15366
|
label: string(),
|
|
@@ -15224,6 +15379,7 @@ var NcConditionDescriptorSchema = object({
|
|
|
15224
15379
|
"crossingSelect",
|
|
15225
15380
|
"polygonDraw",
|
|
15226
15381
|
"occupancy",
|
|
15382
|
+
"audio",
|
|
15227
15383
|
"deviceState",
|
|
15228
15384
|
"systemEvent"
|
|
15229
15385
|
]),
|
|
@@ -15314,13 +15470,17 @@ var NC_CONDITION_CATALOG = [
|
|
|
15314
15470
|
label: "Server update available"
|
|
15315
15471
|
},
|
|
15316
15472
|
{
|
|
15317
|
-
value: "alarm-
|
|
15318
|
-
label: "Alarm
|
|
15473
|
+
value: "alarm-arming",
|
|
15474
|
+
label: "Alarm arming (exit delay)"
|
|
15319
15475
|
},
|
|
15320
15476
|
{
|
|
15321
15477
|
value: "alarm-armed",
|
|
15322
15478
|
label: "Alarm armed"
|
|
15323
15479
|
},
|
|
15480
|
+
{
|
|
15481
|
+
value: "alarm-triggered",
|
|
15482
|
+
label: "Alarm triggered"
|
|
15483
|
+
},
|
|
15324
15484
|
{
|
|
15325
15485
|
value: "alarm-disarmed",
|
|
15326
15486
|
label: "Alarm disarmed"
|
|
@@ -15621,6 +15781,16 @@ var NC_CONDITION_CATALOG = [
|
|
|
15621
15781
|
phase: "P1",
|
|
15622
15782
|
description: "ZoneAnalytics occupancy edge (optionally zone/class-scoped): count crosses the threshold and holds for sustainSeconds. Fail-closed on a missing snapshot."
|
|
15623
15783
|
},
|
|
15784
|
+
{
|
|
15785
|
+
id: "audio",
|
|
15786
|
+
group: "audio",
|
|
15787
|
+
label: "Sound",
|
|
15788
|
+
valueType: "audio",
|
|
15789
|
+
operator: "anyOf",
|
|
15790
|
+
appliesTo: ["immediate"],
|
|
15791
|
+
phase: "P2",
|
|
15792
|
+
description: "Fires when at least hitPercent% of the samples in a samplingSeconds window are hits — a hit clears the dBFS floor AND carries one of the chosen sounds. Both filters are optional and independent, but naming NEITHER never matches: every sample would be a hit, so the engine refuses rather than notifying on silence. dBFS is negative-going (0 = full scale, -96 = silence)."
|
|
15793
|
+
},
|
|
15624
15794
|
{
|
|
15625
15795
|
id: "customZones",
|
|
15626
15796
|
group: "zones",
|
|
@@ -15765,7 +15935,20 @@ var NcSnoozeInputSchema = object({
|
|
|
15765
15935
|
ruleId: string().optional(),
|
|
15766
15936
|
/** Required when `scope: 'device'`. */
|
|
15767
15937
|
deviceId: number().int().optional(),
|
|
15768
|
-
|
|
15938
|
+
/**
|
|
15939
|
+
* Narrow the window to these subject classes — "the cat, not the person".
|
|
15940
|
+
*
|
|
15941
|
+
* ORTHOGONAL to `scope`, deliberately, and absent means EVERY class: that is
|
|
15942
|
+
* what every window authored before this field meant, so no persisted row
|
|
15943
|
+
* changes meaning and no client has to learn anything to keep working.
|
|
15944
|
+
*
|
|
15945
|
+
* It is what makes the window's real key `(deviceId, classes[])` and lets it
|
|
15946
|
+
* cross rules (D133): the operator points at a camera and a kind of thing,
|
|
15947
|
+
* not at whichever of their four rules happened to produce the notification
|
|
15948
|
+
* they are dismissing.
|
|
15949
|
+
*/
|
|
15950
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15951
|
+
durationMinutes: number().int().min(1).max(NC_SNOOZE_MAX_MINUTES),
|
|
15769
15952
|
/**
|
|
15770
15953
|
* Silence this for EVERY recipient, not just the caller. Permission is
|
|
15771
15954
|
* checked server-side (the rule's `snoozeAllowGlobal`, or admin for the
|
|
@@ -15790,6 +15973,10 @@ var NcSnoozeSchema = object({
|
|
|
15790
15973
|
scope: NcSnoozeScopeSchema,
|
|
15791
15974
|
ruleId: string().optional(),
|
|
15792
15975
|
deviceId: number().int().optional(),
|
|
15976
|
+
/** Subject classes this window covers. ABSENT = every class — see
|
|
15977
|
+
* {@link NcSnoozeInputSchema.shape.classes}. Lives in the JSON blob and has
|
|
15978
|
+
* no SQLite column: nothing queries a window by class. */
|
|
15979
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15793
15980
|
startedAt: number(),
|
|
15794
15981
|
/** Exclusive: at exactly this instant the snooze is over. Expiry is a
|
|
15795
15982
|
* COMPARISON, not a job — no sweeper can leave the operator silenced. */
|
|
@@ -18386,7 +18573,14 @@ var zonesCapability = {
|
|
|
18386
18573
|
* handle. Slice shape is `{ zones: Zone[] }` so future extensions
|
|
18387
18574
|
* (e.g. zone groupings) can sit alongside the polygon list.
|
|
18388
18575
|
*/
|
|
18389
|
-
runtimeState: object({ zones: array(ZoneSchema).readonly() })
|
|
18576
|
+
runtimeState: object({ zones: array(ZoneSchema).readonly() }),
|
|
18577
|
+
/**
|
|
18578
|
+
* Runtime-state durability: **restored** — written only on operator mutation, so a camera that never had one has nothing to re-derive from. This is the slice `zone-mirror-hydration.ts` exists to paper over.
|
|
18579
|
+
*
|
|
18580
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
18581
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
18582
|
+
*/
|
|
18583
|
+
durability: "restored"
|
|
18390
18584
|
};
|
|
18391
18585
|
/**
|
|
18392
18586
|
* A bounding box in NORMALIZED [0,1] frame coordinates for `getNativeCrop`. The
|
|
@@ -18556,6 +18750,22 @@ var detectionFpsField = {
|
|
|
18556
18750
|
default: 10,
|
|
18557
18751
|
step: 1
|
|
18558
18752
|
};
|
|
18753
|
+
/**
|
|
18754
|
+
* The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
|
|
18755
|
+
*
|
|
18756
|
+
* The recheck is now on by default (a parked car is invisible to occupancy
|
|
18757
|
+
* rules until the stationary registry has been rebuilt by motion, which after a
|
|
18758
|
+
* restart may be never on a quiet camera). Each cycle re-subscribes a detection
|
|
18759
|
+
* session — an RTSP re-dial — so the switch is only affordable at a WIDE
|
|
18760
|
+
* interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
|
|
18761
|
+
* 30 s. A parked car is therefore counted within 5 minutes of a restart.
|
|
18762
|
+
*
|
|
18763
|
+
* Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
|
|
18764
|
+
* the host validates `attachCamera` against ITS copy of this schema, so a
|
|
18765
|
+
* runner asked for 600 would be rejected by the hub until a `@camstack/server`
|
|
18766
|
+
* carrying the wider bound is installed everywhere. 300 is the widest value
|
|
18767
|
+
* that ships with an addon deploy.
|
|
18768
|
+
*/
|
|
18559
18769
|
var occupancyRecheckSecField = {
|
|
18560
18770
|
min: 0,
|
|
18561
18771
|
max: 300,
|
|
@@ -18757,15 +18967,21 @@ var RunnerCameraConfigSchema = object({
|
|
|
18757
18967
|
*/
|
|
18758
18968
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
18759
18969
|
/**
|
|
18760
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
18761
|
-
*
|
|
18762
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
18763
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
18764
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
18970
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
18971
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
18765
18972
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
18766
18973
|
* (and only render) when this is enabled.
|
|
18767
|
-
|
|
18768
|
-
|
|
18974
|
+
*
|
|
18975
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
18976
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
18977
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
18978
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
18979
|
+
* object is counted only while the stationary registry holds it, and the
|
|
18980
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
18981
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
18982
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
18983
|
+
*/
|
|
18984
|
+
occupancyRecheckEnabled: boolean().default(true),
|
|
18769
18985
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
18770
18986
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
18771
18987
|
/**
|
|
@@ -21229,7 +21445,17 @@ var airQualitySensorCapability = {
|
|
|
21229
21445
|
schema: AirQualitySensorStatusSchema,
|
|
21230
21446
|
kind: "push"
|
|
21231
21447
|
},
|
|
21232
|
-
runtimeState: AirQualitySensorStatusSchema
|
|
21448
|
+
runtimeState: AirQualitySensorStatusSchema,
|
|
21449
|
+
/**
|
|
21450
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`.
|
|
21451
|
+
*
|
|
21452
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21453
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21454
|
+
*/
|
|
21455
|
+
durability: "restored",
|
|
21456
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21457
|
+
* whether persisting is worth a SQLite commit. */
|
|
21458
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
21233
21459
|
};
|
|
21234
21460
|
/**
|
|
21235
21461
|
* Ambient illuminance reading in lux. Drives Home Assistant `sensor`
|
|
@@ -21261,7 +21487,17 @@ var ambientLightSensorCapability = {
|
|
|
21261
21487
|
schema: AmbientLightSensorStatusSchema,
|
|
21262
21488
|
kind: "push"
|
|
21263
21489
|
},
|
|
21264
|
-
runtimeState: AmbientLightSensorStatusSchema
|
|
21490
|
+
runtimeState: AmbientLightSensorStatusSchema,
|
|
21491
|
+
/**
|
|
21492
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`.
|
|
21493
|
+
*
|
|
21494
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21495
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21496
|
+
*/
|
|
21497
|
+
durability: "restored",
|
|
21498
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21499
|
+
* whether persisting is worth a SQLite commit. */
|
|
21500
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
21265
21501
|
};
|
|
21266
21502
|
/**
|
|
21267
21503
|
* Per-class audio metrics aggregated over a sliding window.
|
|
@@ -21379,7 +21615,14 @@ var audioMetricsCapability = {
|
|
|
21379
21615
|
}), AudioMetricsHistorySchema)
|
|
21380
21616
|
},
|
|
21381
21617
|
/** Reactive runtime-state mirror — live `device.state.audioMetrics.value`. */
|
|
21382
|
-
runtimeState: AudioMetricsSnapshotSchema
|
|
21618
|
+
runtimeState: AudioMetricsSnapshotSchema,
|
|
21619
|
+
/**
|
|
21620
|
+
* Runtime-state durability: **session** — 1 Hz per camera at the mirror and ~63 % of the fleet's whole runtime-state write rate. `avgDbfs` is a rolling 60 s mean that genuinely moves every second, so no equality fix reclaims it — and a two-hour-old dB reading rendered as current is worse than no reading.
|
|
21621
|
+
*
|
|
21622
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21623
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21624
|
+
*/
|
|
21625
|
+
durability: "session"
|
|
21383
21626
|
};
|
|
21384
21627
|
/**
|
|
21385
21628
|
* Automation-control cap. Models HA `automation.*` entities on
|
|
@@ -21441,7 +21684,14 @@ var automationControlCapability = {
|
|
|
21441
21684
|
* reads `enabled` (toggle) + `isRunning` (spinner) + `lastError`
|
|
21442
21685
|
* (badge) directly.
|
|
21443
21686
|
*/
|
|
21444
|
-
runtimeState: AutomationControlStatusSchema
|
|
21687
|
+
runtimeState: AutomationControlStatusSchema,
|
|
21688
|
+
/**
|
|
21689
|
+
* Runtime-state durability: **session** — the authority for an automation being enabled is the automation store; a restored `isRunning` would be a lie. D62: one authority per switch.
|
|
21690
|
+
*
|
|
21691
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21692
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21693
|
+
*/
|
|
21694
|
+
durability: "session"
|
|
21445
21695
|
};
|
|
21446
21696
|
/**
|
|
21447
21697
|
* Battery status snapshot. Emitted by providers whose device is
|
|
@@ -21547,7 +21797,17 @@ onStatusChanged: { data: object({
|
|
|
21547
21797
|
* via `device.runtimeState.getCapState('battery')` regardless of
|
|
21548
21798
|
* the underlying driver.
|
|
21549
21799
|
*/
|
|
21550
|
-
runtimeState: BatteryStatusSchema
|
|
21800
|
+
runtimeState: BatteryStatusSchema,
|
|
21801
|
+
/**
|
|
21802
|
+
* Runtime-state durability: **restored** — a sleeping battery camera may not report for hours; the restored percentage is the only thing the UI and the sleep gate have. Zero churn once `lastUpdated` is excluded — 526 writes, 0 value changes, in 25 minutes.
|
|
21803
|
+
*
|
|
21804
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21805
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21806
|
+
*/
|
|
21807
|
+
durability: "restored",
|
|
21808
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21809
|
+
* whether persisting is worth a SQLite commit. */
|
|
21810
|
+
volatileStateFields: ["lastUpdated"]
|
|
21551
21811
|
};
|
|
21552
21812
|
/**
|
|
21553
21813
|
* Generic boolean sensor — last-resort fallback when no domain-
|
|
@@ -21576,7 +21836,17 @@ var binaryCapability = {
|
|
|
21576
21836
|
schema: BinaryStatusSchema,
|
|
21577
21837
|
kind: "push"
|
|
21578
21838
|
},
|
|
21579
|
-
runtimeState: BinaryStatusSchema
|
|
21839
|
+
runtimeState: BinaryStatusSchema,
|
|
21840
|
+
/**
|
|
21841
|
+
* Runtime-state durability: **restored** — transition-driven sensor state; the restored value gives the boot comparison.
|
|
21842
|
+
*
|
|
21843
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21844
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21845
|
+
*/
|
|
21846
|
+
durability: "restored",
|
|
21847
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21848
|
+
* whether persisting is worth a SQLite commit. */
|
|
21849
|
+
volatileStateFields: ["lastChangedAt"]
|
|
21580
21850
|
};
|
|
21581
21851
|
/**
|
|
21582
21852
|
* Dimmable-light brightness control. Co-exists with `switch` on the
|
|
@@ -21629,7 +21899,14 @@ onBrightnessChanged: { data: object({
|
|
|
21629
21899
|
* by the kernel. Read via `device.state.brightness.value` so UI
|
|
21630
21900
|
* sliders surface the current level without polling the provider.
|
|
21631
21901
|
*/
|
|
21632
|
-
runtimeState: BrightnessStatusSchema
|
|
21902
|
+
runtimeState: BrightnessStatusSchema,
|
|
21903
|
+
/**
|
|
21904
|
+
* Runtime-state durability: **session** — live lamp state, re-published by the provider on connect.
|
|
21905
|
+
*
|
|
21906
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21907
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21908
|
+
*/
|
|
21909
|
+
durability: "session"
|
|
21633
21910
|
};
|
|
21634
21911
|
DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
21635
21912
|
kind: "mutation",
|
|
@@ -21717,7 +21994,17 @@ var carbonMonoxideCapability = {
|
|
|
21717
21994
|
schema: CarbonMonoxideStatusSchema,
|
|
21718
21995
|
kind: "push"
|
|
21719
21996
|
},
|
|
21720
|
-
runtimeState: CarbonMonoxideStatusSchema
|
|
21997
|
+
runtimeState: CarbonMonoxideStatusSchema,
|
|
21998
|
+
/**
|
|
21999
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
22000
|
+
*
|
|
22001
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22002
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22003
|
+
*/
|
|
22004
|
+
durability: "restored",
|
|
22005
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22006
|
+
* whether persisting is worth a SQLite commit. */
|
|
22007
|
+
volatileStateFields: ["lastChangedAt"]
|
|
21721
22008
|
};
|
|
21722
22009
|
/**
|
|
21723
22010
|
* HVAC / climate control cap. Models the full surface of a HA
|
|
@@ -21877,7 +22164,14 @@ var climateControlCapability = {
|
|
|
21877
22164
|
* the full slice via `device.state.climate-control.value` and refresh
|
|
21878
22165
|
* on every push without re-querying the provider.
|
|
21879
22166
|
*/
|
|
21880
|
-
runtimeState: ClimateControlStatusSchema
|
|
22167
|
+
runtimeState: ClimateControlStatusSchema,
|
|
22168
|
+
/**
|
|
22169
|
+
* Runtime-state durability: **session** — as `brightness`; `currentTemp` moves continuously and is re-published on connect.
|
|
22170
|
+
*
|
|
22171
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22172
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22173
|
+
*/
|
|
22174
|
+
durability: "session"
|
|
21881
22175
|
};
|
|
21882
22176
|
/**
|
|
21883
22177
|
* Color-light cap. Coexists with `switch` (on/off) and `brightness`
|
|
@@ -21987,7 +22281,14 @@ onColorChanged: { data: object({
|
|
|
21987
22281
|
* kernel. Read via `device.state.color.value` so UI pickers surface
|
|
21988
22282
|
* the current chromaticity without polling the provider.
|
|
21989
22283
|
*/
|
|
21990
|
-
runtimeState: ColorStatusSchema
|
|
22284
|
+
runtimeState: ColorStatusSchema,
|
|
22285
|
+
/**
|
|
22286
|
+
* Runtime-state durability: **session** — as `brightness`.
|
|
22287
|
+
*
|
|
22288
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22289
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22290
|
+
*/
|
|
22291
|
+
durability: "session"
|
|
21991
22292
|
};
|
|
21992
22293
|
var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
|
|
21993
22294
|
object({
|
|
@@ -22045,7 +22346,17 @@ var connectivityCapability = {
|
|
|
22045
22346
|
schema: ConnectivityStatusSchema,
|
|
22046
22347
|
kind: "push"
|
|
22047
22348
|
},
|
|
22048
|
-
runtimeState: ConnectivityStatusSchema
|
|
22349
|
+
runtimeState: ConnectivityStatusSchema,
|
|
22350
|
+
/**
|
|
22351
|
+
* Runtime-state durability: **restored** — same shape and same argument as `device-status`, for links rather than devices.
|
|
22352
|
+
*
|
|
22353
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22354
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22355
|
+
*/
|
|
22356
|
+
durability: "restored",
|
|
22357
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22358
|
+
* whether persisting is worth a SQLite commit. */
|
|
22359
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22049
22360
|
};
|
|
22050
22361
|
/**
|
|
22051
22362
|
* Generic device-consumables capability — surfaces a device's
|
|
@@ -22127,7 +22438,14 @@ reset: method(object({
|
|
|
22127
22438
|
}
|
|
22128
22439
|
}
|
|
22129
22440
|
},
|
|
22130
|
-
runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: number() })
|
|
22441
|
+
runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: number() }),
|
|
22442
|
+
/**
|
|
22443
|
+
* Runtime-state durability: **session** — the authority is the appliance; the provider re-reads the whole item array on connect.
|
|
22444
|
+
*
|
|
22445
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22446
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22447
|
+
*/
|
|
22448
|
+
durability: "session"
|
|
22131
22449
|
};
|
|
22132
22450
|
/**
|
|
22133
22451
|
* Door / window / opening / garage / valve contact sensor. Boolean
|
|
@@ -22158,7 +22476,17 @@ var contactCapability = {
|
|
|
22158
22476
|
schema: ContactStatusSchema,
|
|
22159
22477
|
kind: "push"
|
|
22160
22478
|
},
|
|
22161
|
-
runtimeState: ContactStatusSchema
|
|
22479
|
+
runtimeState: ContactStatusSchema,
|
|
22480
|
+
/**
|
|
22481
|
+
* Runtime-state durability: **restored** — a door left open across a restart must still read open.
|
|
22482
|
+
*
|
|
22483
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22484
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22485
|
+
*/
|
|
22486
|
+
durability: "restored",
|
|
22487
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22488
|
+
* whether persisting is worth a SQLite commit. */
|
|
22489
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22162
22490
|
};
|
|
22163
22491
|
/**
|
|
22164
22492
|
* Status slice — flat object (the framework's `runtimeState` contract
|
|
@@ -22264,7 +22592,14 @@ var controlCapability = {
|
|
|
22264
22592
|
* dropdown / text field / date picker) read the slice's discriminant
|
|
22265
22593
|
* and value directly without polling the provider.
|
|
22266
22594
|
*/
|
|
22267
|
-
runtimeState: ControlStatusSchema
|
|
22595
|
+
runtimeState: ControlStatusSchema,
|
|
22596
|
+
/**
|
|
22597
|
+
* Runtime-state durability: **session** — a generic control mirrors an external entity that re-publishes on connect; the options array is re-derived with it.
|
|
22598
|
+
*
|
|
22599
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22600
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22601
|
+
*/
|
|
22602
|
+
durability: "session"
|
|
22268
22603
|
};
|
|
22269
22604
|
var CoverStatusSchema = object({
|
|
22270
22605
|
/** Lifecycle state of the cover. */
|
|
@@ -22325,7 +22660,17 @@ var coverCapability = {
|
|
|
22325
22660
|
* Runtime-state slice — mirrored by the kernel. UI controls watch
|
|
22326
22661
|
* the slice for live position changes during a move.
|
|
22327
22662
|
*/
|
|
22328
|
-
runtimeState: CoverStatusSchema
|
|
22663
|
+
runtimeState: CoverStatusSchema,
|
|
22664
|
+
/**
|
|
22665
|
+
* Runtime-state durability: **restored** — position survives a restart on the device; the mirror should agree at boot rather than read blank.
|
|
22666
|
+
*
|
|
22667
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22668
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22669
|
+
*/
|
|
22670
|
+
durability: "restored",
|
|
22671
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22672
|
+
* whether persisting is worth a SQLite commit. */
|
|
22673
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22329
22674
|
};
|
|
22330
22675
|
/**
|
|
22331
22676
|
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
@@ -22419,7 +22764,17 @@ var dayNightCapability = {
|
|
|
22419
22764
|
schema: DayNightStatusSchema,
|
|
22420
22765
|
kind: "poll"
|
|
22421
22766
|
},
|
|
22422
|
-
runtimeState: DayNightStatusSchema
|
|
22767
|
+
runtimeState: DayNightStatusSchema,
|
|
22768
|
+
/**
|
|
22769
|
+
* Runtime-state durability: **restored** — operator-set IR-cut behaviour; mutation-driven.
|
|
22770
|
+
*
|
|
22771
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22772
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22773
|
+
*/
|
|
22774
|
+
durability: "restored",
|
|
22775
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22776
|
+
* whether persisting is worth a SQLite commit. */
|
|
22777
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
22423
22778
|
};
|
|
22424
22779
|
/**
|
|
22425
22780
|
* Generic device-level status snapshot. Auto-registered by `BaseDevice`
|
|
@@ -22466,7 +22821,17 @@ onStatusChanged: { data: object({
|
|
|
22466
22821
|
schema: DeviceStatusSchema,
|
|
22467
22822
|
kind: "push"
|
|
22468
22823
|
},
|
|
22469
|
-
runtimeState: DeviceStatusSchema
|
|
22824
|
+
runtimeState: DeviceStatusSchema,
|
|
22825
|
+
/**
|
|
22826
|
+
* Runtime-state durability: **restored** — the previous observation is what makes the first reading after a restart a COMPARISON instead of a phantom transition (D130). 32 real flips across 16 devices in 25 min — the busiest slice in the cold half.
|
|
22827
|
+
*
|
|
22828
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22829
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22830
|
+
*/
|
|
22831
|
+
durability: "restored",
|
|
22832
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22833
|
+
* whether persisting is worth a SQLite commit. */
|
|
22834
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22470
22835
|
};
|
|
22471
22836
|
/**
|
|
22472
22837
|
* Doorbell button cap. Two kinds of providers coexist behind this cap
|
|
@@ -22528,7 +22893,14 @@ onPressed: { data: DoorbellPressEventSchema } },
|
|
|
22528
22893
|
* `device.state.doorbell.value`. UIs can show "last ring 5m ago"
|
|
22529
22894
|
* without subscribing.
|
|
22530
22895
|
*/
|
|
22531
|
-
runtimeState: DoorbellStatusSchema
|
|
22896
|
+
runtimeState: DoorbellStatusSchema,
|
|
22897
|
+
/**
|
|
22898
|
+
* Runtime-state durability: **restored** — a monotonic accumulator: the slice IS the record. `lastPressedAt` is content here, not a clock, so it is deliberately NOT volatile.
|
|
22899
|
+
*
|
|
22900
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22901
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22902
|
+
*/
|
|
22903
|
+
durability: "restored"
|
|
22532
22904
|
};
|
|
22533
22905
|
/**
|
|
22534
22906
|
* Enum-state sensor — a string value picked from a finite option set.
|
|
@@ -22568,7 +22940,17 @@ var enumSensorCapability = {
|
|
|
22568
22940
|
schema: EnumSensorStatusSchema,
|
|
22569
22941
|
kind: "push"
|
|
22570
22942
|
},
|
|
22571
|
-
runtimeState: EnumSensorStatusSchema
|
|
22943
|
+
runtimeState: EnumSensorStatusSchema,
|
|
22944
|
+
/**
|
|
22945
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; 80 devices.
|
|
22946
|
+
*
|
|
22947
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22948
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22949
|
+
*/
|
|
22950
|
+
durability: "restored",
|
|
22951
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22952
|
+
* whether persisting is worth a SQLite commit. */
|
|
22953
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
22572
22954
|
};
|
|
22573
22955
|
/**
|
|
22574
22956
|
* Generic stateless event emitter. Installed on a `DeviceType.EventEmitter`
|
|
@@ -22604,7 +22986,14 @@ var eventEmitterCapability = {
|
|
|
22604
22986
|
schema: EventEmitterStatusSchema,
|
|
22605
22987
|
kind: "push"
|
|
22606
22988
|
},
|
|
22607
|
-
runtimeState: EventEmitterStatusSchema
|
|
22989
|
+
runtimeState: EventEmitterStatusSchema,
|
|
22990
|
+
/**
|
|
22991
|
+
* Runtime-state durability: **session** — `eventCountSinceStart` names its own scope.
|
|
22992
|
+
*
|
|
22993
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22994
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22995
|
+
*/
|
|
22996
|
+
durability: "session"
|
|
22608
22997
|
};
|
|
22609
22998
|
var EventItemSchema = object({
|
|
22610
22999
|
id: string(),
|
|
@@ -22911,7 +23300,14 @@ var fanControlCapability = {
|
|
|
22911
23300
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
22912
23301
|
* sliders read `percentage` for live updates.
|
|
22913
23302
|
*/
|
|
22914
|
-
runtimeState: FanControlStatusSchema
|
|
23303
|
+
runtimeState: FanControlStatusSchema,
|
|
23304
|
+
/**
|
|
23305
|
+
* Runtime-state durability: **session** — as `brightness`.
|
|
23306
|
+
*
|
|
23307
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23308
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23309
|
+
*/
|
|
23310
|
+
durability: "session"
|
|
22915
23311
|
};
|
|
22916
23312
|
/**
|
|
22917
23313
|
* Per-device feature/identity probe slice. Holds the runtime-resolved
|
|
@@ -22987,7 +23383,14 @@ onProbeChanged: { data: object({
|
|
|
22987
23383
|
schema: FeatureProbeStatusSchema,
|
|
22988
23384
|
kind: "push"
|
|
22989
23385
|
},
|
|
22990
|
-
runtimeState: FeatureProbeStatusSchema
|
|
23386
|
+
runtimeState: FeatureProbeStatusSchema,
|
|
23387
|
+
/**
|
|
23388
|
+
* Runtime-state durability: **session** — per-session by definition — `lastProbedAt` means "this worker completed a probe THIS session", which is why the mirror seed already blanks it. Persisting it only creates something to blank.
|
|
23389
|
+
*
|
|
23390
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23391
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23392
|
+
*/
|
|
23393
|
+
durability: "session"
|
|
22991
23394
|
};
|
|
22992
23395
|
/**
|
|
22993
23396
|
* Water leak / moisture sensor. Boolean "is liquid currently
|
|
@@ -23014,7 +23417,17 @@ var floodCapability = {
|
|
|
23014
23417
|
schema: FloodStatusSchema,
|
|
23015
23418
|
kind: "push"
|
|
23016
23419
|
},
|
|
23017
|
-
runtimeState: FloodStatusSchema
|
|
23420
|
+
runtimeState: FloodStatusSchema,
|
|
23421
|
+
/**
|
|
23422
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
23423
|
+
*
|
|
23424
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23425
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23426
|
+
*/
|
|
23427
|
+
durability: "restored",
|
|
23428
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23429
|
+
* whether persisting is worth a SQLite commit. */
|
|
23430
|
+
volatileStateFields: ["lastChangedAt"]
|
|
23018
23431
|
};
|
|
23019
23432
|
/**
|
|
23020
23433
|
* Combustible-gas (LPG / methane / hydrogen) alarm sensor. Drives
|
|
@@ -23037,7 +23450,17 @@ var gasCapability = {
|
|
|
23037
23450
|
schema: GasStatusSchema,
|
|
23038
23451
|
kind: "push"
|
|
23039
23452
|
},
|
|
23040
|
-
runtimeState: GasStatusSchema
|
|
23453
|
+
runtimeState: GasStatusSchema,
|
|
23454
|
+
/**
|
|
23455
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
23456
|
+
*
|
|
23457
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23458
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23459
|
+
*/
|
|
23460
|
+
durability: "restored",
|
|
23461
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23462
|
+
* whether persisting is worth a SQLite commit. */
|
|
23463
|
+
volatileStateFields: ["lastChangedAt"]
|
|
23041
23464
|
};
|
|
23042
23465
|
/**
|
|
23043
23466
|
* Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
|
|
@@ -23113,7 +23536,14 @@ var humidifierCapability = {
|
|
|
23113
23536
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
23114
23537
|
* slice for live humidity / mode changes.
|
|
23115
23538
|
*/
|
|
23116
|
-
runtimeState: HumidifierStatusSchema
|
|
23539
|
+
runtimeState: HumidifierStatusSchema,
|
|
23540
|
+
/**
|
|
23541
|
+
* Runtime-state durability: **session** — as `climate-control`.
|
|
23542
|
+
*
|
|
23543
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23544
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23545
|
+
*/
|
|
23546
|
+
durability: "session"
|
|
23117
23547
|
};
|
|
23118
23548
|
/**
|
|
23119
23549
|
* Single-metric humidity reading. Drives Home Assistant `sensor`
|
|
@@ -23149,7 +23579,17 @@ var humiditySensorCapability = {
|
|
|
23149
23579
|
schema: HumiditySensorStatusSchema,
|
|
23150
23580
|
kind: "push"
|
|
23151
23581
|
},
|
|
23152
|
-
runtimeState: HumiditySensorStatusSchema
|
|
23582
|
+
runtimeState: HumiditySensorStatusSchema,
|
|
23583
|
+
/**
|
|
23584
|
+
* Runtime-state durability: **restored** — as `numeric-sensor` (67 of 75 writes were the clock alone).
|
|
23585
|
+
*
|
|
23586
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23587
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23588
|
+
*/
|
|
23589
|
+
durability: "restored",
|
|
23590
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23591
|
+
* whether persisting is worth a SQLite commit. */
|
|
23592
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
23153
23593
|
};
|
|
23154
23594
|
/**
|
|
23155
23595
|
* Image display cap. Models a single still image exposed by an integration —
|
|
@@ -23187,7 +23627,14 @@ var imageCapability = {
|
|
|
23187
23627
|
* Runtime-state slice — mirrored by the kernel. The UI reads `url`
|
|
23188
23628
|
* directly and renders the still image.
|
|
23189
23629
|
*/
|
|
23190
|
-
runtimeState: ImageStatusSchema
|
|
23630
|
+
runtimeState: ImageStatusSchema,
|
|
23631
|
+
/**
|
|
23632
|
+
* Runtime-state durability: **session** — a snapshot URL is a session-scoped handle; a restored one points at nothing.
|
|
23633
|
+
*
|
|
23634
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23635
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23636
|
+
*/
|
|
23637
|
+
durability: "session"
|
|
23191
23638
|
};
|
|
23192
23639
|
/**
|
|
23193
23640
|
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
@@ -23336,7 +23783,17 @@ var imageSettingsCapability = {
|
|
|
23336
23783
|
schema: ImageSettingsStatusSchema,
|
|
23337
23784
|
kind: "poll"
|
|
23338
23785
|
},
|
|
23339
|
-
runtimeState: ImageSettingsStatusSchema
|
|
23786
|
+
runtimeState: ImageSettingsStatusSchema,
|
|
23787
|
+
/**
|
|
23788
|
+
* Runtime-state durability: **restored** — operator-set camera imaging; mutation-driven.
|
|
23789
|
+
*
|
|
23790
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23791
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23792
|
+
*/
|
|
23793
|
+
durability: "restored",
|
|
23794
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23795
|
+
* whether persisting is worth a SQLite commit. */
|
|
23796
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
23340
23797
|
};
|
|
23341
23798
|
/**
|
|
23342
23799
|
* integrations — system-scoped singleton capability for integration
|
|
@@ -23676,7 +24133,14 @@ var lawnMowerControlCapability = {
|
|
|
23676
24133
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
23677
24134
|
* slice for live activity + battery changes.
|
|
23678
24135
|
*/
|
|
23679
|
-
runtimeState: LawnMowerControlStatusSchema
|
|
24136
|
+
runtimeState: LawnMowerControlStatusSchema,
|
|
24137
|
+
/**
|
|
24138
|
+
* Runtime-state durability: **session** — as `vacuum-control`.
|
|
24139
|
+
*
|
|
24140
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24141
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24142
|
+
*/
|
|
24143
|
+
durability: "session"
|
|
23680
24144
|
};
|
|
23681
24145
|
/**
|
|
23682
24146
|
* local-network — hub-only singleton.
|
|
@@ -23882,7 +24346,17 @@ var lockControlCapability = {
|
|
|
23882
24346
|
* read `state` and disable themselves during `locking`/`unlocking`
|
|
23883
24347
|
* transitions.
|
|
23884
24348
|
*/
|
|
23885
|
-
runtimeState: LockControlStatusSchema
|
|
24349
|
+
runtimeState: LockControlStatusSchema,
|
|
24350
|
+
/**
|
|
24351
|
+
* Runtime-state durability: **restored** — a lock left locked must still read locked.
|
|
24352
|
+
*
|
|
24353
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24354
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24355
|
+
*/
|
|
24356
|
+
durability: "restored",
|
|
24357
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
24358
|
+
* whether persisting is worth a SQLite commit. */
|
|
24359
|
+
volatileStateFields: ["lastChangedAt"]
|
|
23886
24360
|
};
|
|
23887
24361
|
/**
|
|
23888
24362
|
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
@@ -24044,7 +24518,14 @@ var mediaPlayerCapability = {
|
|
|
24044
24518
|
* full slice for live now-playing, volume, and progress updates
|
|
24045
24519
|
* without polling.
|
|
24046
24520
|
*/
|
|
24047
|
-
runtimeState: MediaPlayerStatusSchema
|
|
24521
|
+
runtimeState: MediaPlayerStatusSchema,
|
|
24522
|
+
/**
|
|
24523
|
+
* Runtime-state durability: **session** — a restored transport position describes a playback that stopped when the hub did.
|
|
24524
|
+
*
|
|
24525
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24526
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24527
|
+
*/
|
|
24528
|
+
durability: "session"
|
|
24048
24529
|
};
|
|
24049
24530
|
/**
|
|
24050
24531
|
* mesh-network — collection cap for mesh-VPN providers.
|
|
@@ -24308,7 +24789,14 @@ onMotionChanged: { data: MotionOnMotionChangedDataSchema } },
|
|
|
24308
24789
|
* `device.state.motion.value`. Reads never invoke the provider, so
|
|
24309
24790
|
* UIs and other addons can poll the cached state safely.
|
|
24310
24791
|
*/
|
|
24311
|
-
runtimeState: MotionStatusSchema
|
|
24792
|
+
runtimeState: MotionStatusSchema,
|
|
24793
|
+
/**
|
|
24794
|
+
* Runtime-state durability: **session** — self-clearing by construction (`autoClearAfterMs`); a restored `detected: true` is a frozen event, and the next frame re-publishes the real one.
|
|
24795
|
+
*
|
|
24796
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24797
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24798
|
+
*/
|
|
24799
|
+
durability: "session"
|
|
24312
24800
|
};
|
|
24313
24801
|
/**
|
|
24314
24802
|
* Motion-trigger toggle for accessory devices.
|
|
@@ -24373,7 +24861,14 @@ var motionTriggerCapability = {
|
|
|
24373
24861
|
schema: MotionTriggerStatusSchema,
|
|
24374
24862
|
kind: "command-driven"
|
|
24375
24863
|
},
|
|
24376
|
-
runtimeState: MotionTriggerRuntimeStateSchema
|
|
24864
|
+
runtimeState: MotionTriggerRuntimeStateSchema,
|
|
24865
|
+
/**
|
|
24866
|
+
* Runtime-state durability: **session** — the authority for motion-trigger enablement is the provider's own config; the slice is a mirror of it, re-published on connect.
|
|
24867
|
+
*
|
|
24868
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24869
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24870
|
+
*/
|
|
24871
|
+
durability: "session"
|
|
24377
24872
|
};
|
|
24378
24873
|
/**
|
|
24379
24874
|
* Motion-zones share the same MaskShape vocabulary as privacy-mask — the
|
|
@@ -24440,7 +24935,17 @@ var motionZonesCapability = {
|
|
|
24440
24935
|
schema: MotionZoneStatusSchema,
|
|
24441
24936
|
kind: "poll"
|
|
24442
24937
|
},
|
|
24443
|
-
runtimeState: MotionZoneStatusSchema
|
|
24938
|
+
runtimeState: MotionZoneStatusSchema,
|
|
24939
|
+
/**
|
|
24940
|
+
* Runtime-state durability: **restored** — the 14 KB polygon list is the single largest slice on the fleet and has not changed since the operator drew it. Highest value per byte in the table.
|
|
24941
|
+
*
|
|
24942
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24943
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24944
|
+
*/
|
|
24945
|
+
durability: "restored",
|
|
24946
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
24947
|
+
* whether persisting is worth a SQLite commit. */
|
|
24948
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
24444
24949
|
};
|
|
24445
24950
|
/**
|
|
24446
24951
|
* On-camera AI object detection cap. Surfaces per-device the classes
|
|
@@ -24514,7 +25019,17 @@ var nativeObjectDetectionCapability = {
|
|
|
24514
25019
|
schema: NativeObjectDetectionStatusSchema,
|
|
24515
25020
|
kind: "push"
|
|
24516
25021
|
},
|
|
24517
|
-
runtimeState: NativeObjectDetectionRuntimeStateSchema
|
|
25022
|
+
runtimeState: NativeObjectDetectionRuntimeStateSchema,
|
|
25023
|
+
/**
|
|
25024
|
+
* Runtime-state durability: **restored** — `enabled` is an operator toggle on a camera whose refresh is a no-op and whose staleMs is Infinity. There is no hardware value to re-read — losing it loses the setting.
|
|
25025
|
+
*
|
|
25026
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25027
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25028
|
+
*/
|
|
25029
|
+
durability: "restored",
|
|
25030
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
25031
|
+
* whether persisting is worth a SQLite commit. */
|
|
25032
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
24518
25033
|
};
|
|
24519
25034
|
/**
|
|
24520
25035
|
* network-quality — system-scoped singleton capability tracking RTT,
|
|
@@ -24848,7 +25363,14 @@ onSent: { data: object({
|
|
|
24848
25363
|
* form reads `supports` to gate optional fields; history pane reads
|
|
24849
25364
|
* `lastSentAt` / `lastError` / `queueDepth`.
|
|
24850
25365
|
*/
|
|
24851
|
-
runtimeState: NotifierStatusSchema
|
|
25366
|
+
runtimeState: NotifierStatusSchema,
|
|
25367
|
+
/**
|
|
25368
|
+
* Runtime-state durability: **session** — live queue depth and last-send state; a restored queue depth describes a queue that no longer exists.
|
|
25369
|
+
*
|
|
25370
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25371
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25372
|
+
*/
|
|
25373
|
+
durability: "session"
|
|
24852
25374
|
};
|
|
24853
25375
|
/**
|
|
24854
25376
|
* Generic numeric sensor — last-resort fallback when no typed numeric
|
|
@@ -24891,7 +25413,17 @@ var numericSensorCapability = {
|
|
|
24891
25413
|
schema: NumericSensorStatusSchema,
|
|
24892
25414
|
kind: "push"
|
|
24893
25415
|
},
|
|
24894
|
-
runtimeState: NumericSensorStatusSchema
|
|
25416
|
+
runtimeState: NumericSensorStatusSchema,
|
|
25417
|
+
/**
|
|
25418
|
+
* Runtime-state durability: **restored** — polled value, low churn once the clock is excluded (251 of 669 writes were the clock alone); restoring it removes the cold window before the first poll.
|
|
25419
|
+
*
|
|
25420
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25421
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25422
|
+
*/
|
|
25423
|
+
durability: "restored",
|
|
25424
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
25425
|
+
* whether persisting is worth a SQLite commit. */
|
|
25426
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
24895
25427
|
};
|
|
24896
25428
|
/**
|
|
24897
25429
|
* Generic on-screen-display (video overlay) cap. Each camera exposes
|
|
@@ -25276,7 +25808,14 @@ var petFeederCapability = {
|
|
|
25276
25808
|
* the full slice via `device.state.petFeeder.value` and refresh on
|
|
25277
25809
|
* every poll without re-querying the provider.
|
|
25278
25810
|
*/
|
|
25279
|
-
runtimeState: PetFeederStatusSchema
|
|
25811
|
+
runtimeState: PetFeederStatusSchema,
|
|
25812
|
+
/**
|
|
25813
|
+
* Runtime-state durability: **session** — live appliance state re-published on connect.
|
|
25814
|
+
*
|
|
25815
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25816
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25817
|
+
*/
|
|
25818
|
+
durability: "session"
|
|
25280
25819
|
};
|
|
25281
25820
|
var VehicleSchema = object({
|
|
25282
25821
|
id: string(),
|
|
@@ -25622,7 +26161,17 @@ var powerMeterCapability = {
|
|
|
25622
26161
|
schema: PowerMeterStatusSchema,
|
|
25623
26162
|
kind: "push"
|
|
25624
26163
|
},
|
|
25625
|
-
runtimeState: PowerMeterStatusSchema
|
|
26164
|
+
runtimeState: PowerMeterStatusSchema,
|
|
26165
|
+
/**
|
|
26166
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `kwhTotal` is an accumulator whose restored value is the baseline.
|
|
26167
|
+
*
|
|
26168
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26169
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26170
|
+
*/
|
|
26171
|
+
durability: "restored",
|
|
26172
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26173
|
+
* whether persisting is worth a SQLite commit. */
|
|
26174
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
25626
26175
|
};
|
|
25627
26176
|
/**
|
|
25628
26177
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
@@ -25679,7 +26228,17 @@ var presenceCapability = {
|
|
|
25679
26228
|
* the map pin is rendered (use `DeviceFeature.PresenceGps` for the
|
|
25680
26229
|
* pre-fetch fast-path check).
|
|
25681
26230
|
*/
|
|
25682
|
-
runtimeState: PresenceStatusSchema
|
|
26231
|
+
runtimeState: PresenceStatusSchema,
|
|
26232
|
+
/**
|
|
26233
|
+
* Runtime-state durability: **restored** — occupancy-relevant: the restored state is what an occupancy rule compares the first post-restart observation against.
|
|
26234
|
+
*
|
|
26235
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26236
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26237
|
+
*/
|
|
26238
|
+
durability: "restored",
|
|
26239
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26240
|
+
* whether persisting is worth a SQLite commit. */
|
|
26241
|
+
volatileStateFields: ["lastChangedAt"]
|
|
25683
26242
|
};
|
|
25684
26243
|
/**
|
|
25685
26244
|
* Atmospheric pressure reading in hectopascals. Drives Home Assistant
|
|
@@ -25715,7 +26274,17 @@ var pressureSensorCapability = {
|
|
|
25715
26274
|
schema: PressureSensorStatusSchema,
|
|
25716
26275
|
kind: "push"
|
|
25717
26276
|
},
|
|
25718
|
-
runtimeState: PressureSensorStatusSchema
|
|
26277
|
+
runtimeState: PressureSensorStatusSchema,
|
|
26278
|
+
/**
|
|
26279
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`.
|
|
26280
|
+
*
|
|
26281
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26282
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26283
|
+
*/
|
|
26284
|
+
durability: "restored",
|
|
26285
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26286
|
+
* whether persisting is worth a SQLite commit. */
|
|
26287
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
25719
26288
|
};
|
|
25720
26289
|
/**
|
|
25721
26290
|
* PRIVACY — what the camera deliberately does not capture. Two planes:
|
|
@@ -25845,7 +26414,17 @@ var privacyMaskCapability = {
|
|
|
25845
26414
|
schema: PrivacyMaskStatusSchema,
|
|
25846
26415
|
kind: "poll"
|
|
25847
26416
|
},
|
|
25848
|
-
runtimeState: PrivacyMaskStatusSchema
|
|
26417
|
+
runtimeState: PrivacyMaskStatusSchema,
|
|
26418
|
+
/**
|
|
26419
|
+
* Runtime-state durability: **restored** — operator-drawn regions, zero real churn — 22 writes in 25 minutes, every one of them the clock.
|
|
26420
|
+
*
|
|
26421
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26422
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26423
|
+
*/
|
|
26424
|
+
durability: "restored",
|
|
26425
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26426
|
+
* whether persisting is worth a SQLite commit. */
|
|
26427
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
25849
26428
|
};
|
|
25850
26429
|
var PtzPresetSchema = object({
|
|
25851
26430
|
id: string(),
|
|
@@ -26011,7 +26590,14 @@ var ptzAutotrackCapability = {
|
|
|
26011
26590
|
* fetch / cache / fallback logic out of the four cap methods —
|
|
26012
26591
|
* they become trampolines over `runtimeState`.
|
|
26013
26592
|
*/
|
|
26014
|
-
runtimeState: PtzAutotrackRuntimeStateSchema
|
|
26593
|
+
runtimeState: PtzAutotrackRuntimeStateSchema,
|
|
26594
|
+
/**
|
|
26595
|
+
* Runtime-state durability: **session** — mirrors the camera's own autotrack config, re-read on connect.
|
|
26596
|
+
*
|
|
26597
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26598
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26599
|
+
*/
|
|
26600
|
+
durability: "session"
|
|
26015
26601
|
};
|
|
26016
26602
|
DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
|
|
26017
26603
|
kind: "mutation",
|
|
@@ -26680,7 +27266,14 @@ var sceneMonitorCapability = {
|
|
|
26680
27266
|
schema: SceneMonitorStatusSchema,
|
|
26681
27267
|
kind: "push"
|
|
26682
27268
|
},
|
|
26683
|
-
runtimeState: SceneMonitorStatusSchema
|
|
27269
|
+
runtimeState: SceneMonitorStatusSchema,
|
|
27270
|
+
/**
|
|
27271
|
+
* Runtime-state durability: **session** — re-derived from the current scene on the next evaluation.
|
|
27272
|
+
*
|
|
27273
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27274
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27275
|
+
*/
|
|
27276
|
+
durability: "session"
|
|
26684
27277
|
};
|
|
26685
27278
|
/**
|
|
26686
27279
|
* Per-stage gating mode applied to the zones a rule references.
|
|
@@ -26824,7 +27417,14 @@ var scriptRunnerCapability = {
|
|
|
26824
27417
|
* `isRunning` to render a spinner during execution and surfaces
|
|
26825
27418
|
* `lastError` / `lastRunSuccess` in the recent-runs panel.
|
|
26826
27419
|
*/
|
|
26827
|
-
runtimeState: ScriptRunnerStatusSchema
|
|
27420
|
+
runtimeState: ScriptRunnerStatusSchema,
|
|
27421
|
+
/**
|
|
27422
|
+
* Runtime-state durability: **session** — a restored `isRunning: true` describes a process that died with the previous hub.
|
|
27423
|
+
*
|
|
27424
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27425
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27426
|
+
*/
|
|
27427
|
+
durability: "session"
|
|
26828
27428
|
};
|
|
26829
27429
|
/**
|
|
26830
27430
|
* Smoke alarm sensor — boolean "is smoke currently detected" with
|
|
@@ -26851,7 +27451,17 @@ var smokeCapability = {
|
|
|
26851
27451
|
schema: SmokeStatusSchema,
|
|
26852
27452
|
kind: "push"
|
|
26853
27453
|
},
|
|
26854
|
-
runtimeState: SmokeStatusSchema
|
|
27454
|
+
runtimeState: SmokeStatusSchema,
|
|
27455
|
+
/**
|
|
27456
|
+
* Runtime-state durability: **restored** — a safety sensor must not read "clear" merely because the hub restarted.
|
|
27457
|
+
*
|
|
27458
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27459
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27460
|
+
*/
|
|
27461
|
+
durability: "restored",
|
|
27462
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27463
|
+
* whether persisting is worth a SQLite commit. */
|
|
27464
|
+
volatileStateFields: ["lastChangedAt"]
|
|
26855
27465
|
};
|
|
26856
27466
|
/**
|
|
26857
27467
|
* One publishable camera stream as its OWNING PROVIDER describes it — the same
|
|
@@ -27024,7 +27634,17 @@ var streamParamsCapability = {
|
|
|
27024
27634
|
schema: StreamParamsStatusSchema,
|
|
27025
27635
|
kind: "poll"
|
|
27026
27636
|
},
|
|
27027
|
-
runtimeState: StreamParamsStatusSchema
|
|
27637
|
+
runtimeState: StreamParamsStatusSchema,
|
|
27638
|
+
/**
|
|
27639
|
+
* Runtime-state durability: **restored** — operator-set encoder profile; mutation-driven.
|
|
27640
|
+
*
|
|
27641
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27642
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27643
|
+
*/
|
|
27644
|
+
durability: "restored",
|
|
27645
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27646
|
+
* whether persisting is worth a SQLite commit. */
|
|
27647
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
27028
27648
|
};
|
|
27029
27649
|
/**
|
|
27030
27650
|
* Generic on/off switch cap for accessory children (siren, floodlight,
|
|
@@ -27070,6 +27690,16 @@ var switchCapability = {
|
|
|
27070
27690
|
* not need to re-query the provider after a setState mutation.
|
|
27071
27691
|
*/
|
|
27072
27692
|
runtimeState: SwitchStatusSchema,
|
|
27693
|
+
/**
|
|
27694
|
+
* Runtime-state durability: **restored** — device state an operator reads as authoritative; 55 devices, transition-driven.
|
|
27695
|
+
*
|
|
27696
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27697
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27698
|
+
*/
|
|
27699
|
+
durability: "restored",
|
|
27700
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27701
|
+
* whether persisting is worth a SQLite commit. */
|
|
27702
|
+
volatileStateFields: ["lastChangedAt"],
|
|
27073
27703
|
settings: { bindings: [{
|
|
27074
27704
|
kind: "scalar",
|
|
27075
27705
|
statusPath: "on",
|
|
@@ -27149,7 +27779,17 @@ var tamperCapability = {
|
|
|
27149
27779
|
schema: TamperStatusSchema,
|
|
27150
27780
|
kind: "push"
|
|
27151
27781
|
},
|
|
27152
|
-
runtimeState: TamperStatusSchema
|
|
27782
|
+
runtimeState: TamperStatusSchema,
|
|
27783
|
+
/**
|
|
27784
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
27785
|
+
*
|
|
27786
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27787
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27788
|
+
*/
|
|
27789
|
+
durability: "restored",
|
|
27790
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27791
|
+
* whether persisting is worth a SQLite commit. */
|
|
27792
|
+
volatileStateFields: ["lastChangedAt"]
|
|
27153
27793
|
};
|
|
27154
27794
|
/**
|
|
27155
27795
|
* Single-metric temperature reading. Drives Home Assistant `sensor`
|
|
@@ -27194,7 +27834,17 @@ var temperatureSensorCapability = {
|
|
|
27194
27834
|
schema: TemperatureSensorStatusSchema,
|
|
27195
27835
|
kind: "push"
|
|
27196
27836
|
},
|
|
27197
|
-
runtimeState: TemperatureSensorStatusSchema
|
|
27837
|
+
runtimeState: TemperatureSensorStatusSchema,
|
|
27838
|
+
/**
|
|
27839
|
+
* Runtime-state durability: **restored** — as `numeric-sensor` (69 of 125 writes were the clock alone).
|
|
27840
|
+
*
|
|
27841
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27842
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27843
|
+
*/
|
|
27844
|
+
durability: "restored",
|
|
27845
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27846
|
+
* whether persisting is worth a SQLite commit. */
|
|
27847
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
27198
27848
|
};
|
|
27199
27849
|
/**
|
|
27200
27850
|
* toast — system-scoped singleton capability that streams toast
|
|
@@ -27263,7 +27913,14 @@ var updateCapability = {
|
|
|
27263
27913
|
schema: UpdateStatusSchema,
|
|
27264
27914
|
kind: "poll"
|
|
27265
27915
|
},
|
|
27266
|
-
runtimeState: UpdateStatusSchema
|
|
27916
|
+
runtimeState: UpdateStatusSchema,
|
|
27917
|
+
/**
|
|
27918
|
+
* Runtime-state durability: **session** — a restored `inProgress: true` describes an update that is no longer running; versions are re-probed at boot.
|
|
27919
|
+
*
|
|
27920
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27921
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27922
|
+
*/
|
|
27923
|
+
durability: "session"
|
|
27267
27924
|
};
|
|
27268
27925
|
var UserSummarySchema = object({
|
|
27269
27926
|
id: string(),
|
|
@@ -27597,7 +28254,14 @@ var vacuumControlCapability = {
|
|
|
27597
28254
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
27598
28255
|
* slice for live state + battery + fan-speed changes.
|
|
27599
28256
|
*/
|
|
27600
|
-
runtimeState: VacuumControlStatusSchema
|
|
28257
|
+
runtimeState: VacuumControlStatusSchema,
|
|
28258
|
+
/**
|
|
28259
|
+
* Runtime-state durability: **session** — as `media-player` — a restored `state: cleaning` is a robot that is not cleaning.
|
|
28260
|
+
*
|
|
28261
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28262
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28263
|
+
*/
|
|
28264
|
+
durability: "session"
|
|
27601
28265
|
};
|
|
27602
28266
|
var ValveStatusSchema = object({
|
|
27603
28267
|
/** Lifecycle state of the valve. */
|
|
@@ -27649,7 +28313,14 @@ var valveCapability = {
|
|
|
27649
28313
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
27650
28314
|
* slice for live position changes during a move.
|
|
27651
28315
|
*/
|
|
27652
|
-
runtimeState: ValveStatusSchema
|
|
28316
|
+
runtimeState: ValveStatusSchema,
|
|
28317
|
+
/**
|
|
28318
|
+
* Runtime-state durability: **session** — as `brightness`.
|
|
28319
|
+
*
|
|
28320
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28321
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28322
|
+
*/
|
|
28323
|
+
durability: "session"
|
|
27653
28324
|
};
|
|
27654
28325
|
/**
|
|
27655
28326
|
* Vibration / shake / impact sensor. Drives Home Assistant
|
|
@@ -27671,7 +28342,17 @@ var vibrationCapability = {
|
|
|
27671
28342
|
schema: VibrationStatusSchema,
|
|
27672
28343
|
kind: "push"
|
|
27673
28344
|
},
|
|
27674
|
-
runtimeState: VibrationStatusSchema
|
|
28345
|
+
runtimeState: VibrationStatusSchema,
|
|
28346
|
+
/**
|
|
28347
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
28348
|
+
*
|
|
28349
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28350
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28351
|
+
*/
|
|
28352
|
+
durability: "restored",
|
|
28353
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
28354
|
+
* whether persisting is worth a SQLite commit. */
|
|
28355
|
+
volatileStateFields: ["lastChangedAt"]
|
|
27675
28356
|
};
|
|
27676
28357
|
/**
|
|
27677
28358
|
* Water heater / boiler cap. Models HA `water_heater.*` entities — a
|
|
@@ -27745,7 +28426,14 @@ var waterHeaterCapability = {
|
|
|
27745
28426
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
27746
28427
|
* slice for live temperature / mode / away changes.
|
|
27747
28428
|
*/
|
|
27748
|
-
runtimeState: WaterHeaterStatusSchema
|
|
28429
|
+
runtimeState: WaterHeaterStatusSchema,
|
|
28430
|
+
/**
|
|
28431
|
+
* Runtime-state durability: **session** — as `climate-control`.
|
|
28432
|
+
*
|
|
28433
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28434
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28435
|
+
*/
|
|
28436
|
+
durability: "session"
|
|
27749
28437
|
};
|
|
27750
28438
|
/**
|
|
27751
28439
|
* Weather provider cap. Models HA `weather.*` entities — a read-only
|
|
@@ -27804,7 +28492,14 @@ var weatherCapability = {
|
|
|
27804
28492
|
* Runtime-state slice — mirrored by the kernel. The UI reads the
|
|
27805
28493
|
* current conditions directly from the slice on each weather push.
|
|
27806
28494
|
*/
|
|
27807
|
-
runtimeState: WeatherStatusSchema
|
|
28495
|
+
runtimeState: WeatherStatusSchema,
|
|
28496
|
+
/**
|
|
28497
|
+
* Runtime-state durability: **session** — a forecast is stale the moment the hub is down; the provider re-fetches on connect.
|
|
28498
|
+
*
|
|
28499
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28500
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28501
|
+
*/
|
|
28502
|
+
durability: "session"
|
|
27808
28503
|
};
|
|
27809
28504
|
/**
|
|
27810
28505
|
* Per-zone occupancy aggregation produced by the analytics frame
|
|
@@ -27966,7 +28661,14 @@ var zoneAnalyticsCapability = {
|
|
|
27966
28661
|
* automatically; the explicit `getCurrentSnapshot` cap method is
|
|
27967
28662
|
* still useful for one-off polls without a subscription.
|
|
27968
28663
|
*/
|
|
27969
|
-
runtimeState: CameraOccupancySnapshotSchema
|
|
28664
|
+
runtimeState: CameraOccupancySnapshotSchema,
|
|
28665
|
+
/**
|
|
28666
|
+
* Runtime-state durability: **session** — per-frame analytics; with `audio-metrics` it is ~90 % of the offered write rate. Re-derived on the next frame.
|
|
28667
|
+
*
|
|
28668
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28669
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28670
|
+
*/
|
|
28671
|
+
durability: "session"
|
|
27970
28672
|
};
|
|
27971
28673
|
/**
|
|
27972
28674
|
* Stages a {@link ZoneRule} can apply to. Discriminator on the rules
|
|
@@ -28044,7 +28746,14 @@ var zoneRulesCapability = {
|
|
|
28044
28746
|
motion: array(ZoneRuleSchema).readonly(),
|
|
28045
28747
|
detection: array(ZoneRuleSchema).readonly(),
|
|
28046
28748
|
package: array(ZoneRuleSchema).readonly()
|
|
28047
|
-
})
|
|
28749
|
+
}),
|
|
28750
|
+
/**
|
|
28751
|
+
* Runtime-state durability: **restored** — operator intent, mutation-only, same argument as `zones`.
|
|
28752
|
+
*
|
|
28753
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28754
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28755
|
+
*/
|
|
28756
|
+
durability: "restored"
|
|
28048
28757
|
};
|
|
28049
28758
|
/**
|
|
28050
28759
|
* Most specific first. Extending this list is how a new device kind becomes
|
|
@@ -34784,6 +35493,7 @@ Object.freeze({
|
|
|
34784
35493
|
"network-access": "ingress",
|
|
34785
35494
|
"smtp-provider": "email"
|
|
34786
35495
|
});
|
|
35496
|
+
new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
|
|
34787
35497
|
new Set(["devices", "classes"]);
|
|
34788
35498
|
var WEEKDAY_TO_DAY = {
|
|
34789
35499
|
Sun: 0,
|
|
@@ -35327,4 +36037,4 @@ function vectorDimFromBase64(encoded) {
|
|
|
35327
36037
|
return Math.floor(Buffer.from(encoded, "base64").byteLength / 4);
|
|
35328
36038
|
}
|
|
35329
36039
|
//#endregion
|
|
35330
|
-
export {
|
|
36040
|
+
export { readDeviceStateFrom as $, TimelapseRuleInputSchema as A, customAction as B, NcSnoozeSchema as C, unknown as Ct, RECORDING_EXPORT_MAX_READ_BYTES as D, OpsLogEntrySchema as E, alarmPanelCapability as F, faceGalleryCapability as G, deriveRecordingMode as H, assertTimelapseCadences as I, isScheduleActive as J, hfModelUrl as K, audioMetricsCapability as L, TimelapseRuleSchema as M, TrackSourceSchema as N, RetrainStatusSchema as O, addonWidgetsSourceCapability as P, plateGalleryCapability as Q, buildEventKindDescriptor as R, NcSnoozeInputSchema as S, string as St, NcTaxonomySchema as T, embeddingEncoderCapability as U, defineCustomActions as V, encodeVectorBase64 as W, notificationRulesCapability as X, kebabToCamel as Y, pipelineAnalyticsCapability as Z, NcRuleInputSchema as _, literal as _t, DETECTION_PIPELINE_CAP_NAME as a, errMsg as at, NcRuleTargetSchema as b, partialRecord as bt, EVENT_PAD_MS as c, createEvent as ct, NC_ALARM_SYSTEM_EVENT_KINDS as d, nodePin as dt, readTimelapseGeneratedAt as et, NC_CONDITION_CATALOG as f, sleep as ft, NcConditionDescriptorSchema as g, discriminatedUnion as gt, NC_TAXONOMY as h, boolean as ht, DETECTION_MACRO_CLASSES as i, zoneAnalyticsCapability as it, TimelapseRulePatchSchema as j, TIMELAPSE_DENSE_FLOOR_SEC as k, LabelAttributionSchema as l, hydrateSchema as lt, NC_SNOOZE_MAX_MINUTES as m, array as mt, DEFAULT_EVENT_COLOR as n, vectorDimFromBase64 as nt, DeclaredDevices as o, BaseAddon as ot, NC_DEFAULT_SNOOZE_MINUTES as p, _enum as pt, isDetectionMacroClass as q, DEFAULT_TIMELAPSE_PREVIEW_TEXT as r, videoclipsCapability as rt, EVENT_KIND_BY_CAP as s, DeviceType as st, BaseDevice as t, subKindsOf as tt, MACRO_LABELS as u, isDeviceScopedCap as ut, NcRulePatchSchema as v, number as vt, NcSnoozeSuppressedSchema as w, EventCategory as wt, NcScheduleSchema as x, record as xt, NcRuleSchema as y, object as yt, cosineSimilarity as z };
|