@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
|
@@ -11021,7 +11021,14 @@ var cameraStreamsCapability = {
|
|
|
11021
11021
|
low: string().optional()
|
|
11022
11022
|
}),
|
|
11023
11023
|
lastChangedAt: number()
|
|
11024
|
-
})
|
|
11024
|
+
}),
|
|
11025
|
+
/**
|
|
11026
|
+
* 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.
|
|
11027
|
+
*
|
|
11028
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
11029
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
11030
|
+
*/
|
|
11031
|
+
durability: "session"
|
|
11025
11032
|
};
|
|
11026
11033
|
/** kebab-case cap name → camelCase router-map key. */
|
|
11027
11034
|
function kebabToCamel(s) {
|
|
@@ -11608,6 +11615,13 @@ var deviceDiscoveryCapability = {
|
|
|
11608
11615
|
kind: "poll"
|
|
11609
11616
|
},
|
|
11610
11617
|
runtimeState: DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int().nonnegative() }),
|
|
11618
|
+
/**
|
|
11619
|
+
* Runtime-state durability: **session** — 5.7 KB of scan output on the largest device, fully re-derivable by re-scanning.
|
|
11620
|
+
*
|
|
11621
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
11622
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
11623
|
+
*/
|
|
11624
|
+
durability: "session",
|
|
11611
11625
|
methods: {
|
|
11612
11626
|
/**
|
|
11613
11627
|
* Snapshot of the current `discovered` list. Returns the
|
|
@@ -13432,11 +13446,33 @@ var NotificationFormatSchema = _enum([
|
|
|
13432
13446
|
* Named by INTENT, never by glyph. "check" would tie the vocabulary to one
|
|
13433
13447
|
* renderer's icon set; "acknowledge" survives an adapter that draws it
|
|
13434
13448
|
* differently.
|
|
13449
|
+
*
|
|
13450
|
+
* ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
|
|
13451
|
+
*
|
|
13452
|
+
* These names are for US. **No adapter may forward one verbatim.** Each maps
|
|
13453
|
+
* the whole set onto its own renderer's vocabulary through a
|
|
13454
|
+
* `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
|
|
13455
|
+
* fallback, so adding a member here fails every adapter's build until someone
|
|
13456
|
+
* decides its glyph, which is the only place that decision can be made
|
|
13457
|
+
* honestly.
|
|
13458
|
+
*
|
|
13459
|
+
* This paragraph is the bug. Zentik declared `actionIcons: true` and passed
|
|
13460
|
+
* `disarm` straight through; iOS feeds that string to
|
|
13461
|
+
* `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
|
|
13462
|
+
* and every snooze and alarm button arrived BLANK. A pass-through is not a
|
|
13463
|
+
* mapping, and "the field is documented" is not "the value renders".
|
|
13464
|
+
*
|
|
13465
|
+
* Adding a member is TRAIN-BOUND. The enum lives in the published
|
|
13466
|
+
* `@camstack/server` closure and the cap seam validates against the HUB's copy,
|
|
13467
|
+
* so an addon that emits a token the running hub does not know does not lose an
|
|
13468
|
+
* icon — its whole `send` fails Zod validation and the notification never
|
|
13469
|
+
* arrives. Never emit a new token from an addon before the train carrying it.
|
|
13435
13470
|
*/
|
|
13436
13471
|
var NotificationActionIconSchema = _enum([
|
|
13437
13472
|
"acknowledge",
|
|
13438
13473
|
"dismiss",
|
|
13439
13474
|
"silence",
|
|
13475
|
+
"snooze",
|
|
13440
13476
|
"view",
|
|
13441
13477
|
"play",
|
|
13442
13478
|
"open",
|
|
@@ -13444,9 +13480,13 @@ var NotificationActionIconSchema = _enum([
|
|
|
13444
13480
|
"lock",
|
|
13445
13481
|
"unlock",
|
|
13446
13482
|
"arm",
|
|
13483
|
+
"arm-home",
|
|
13484
|
+
"arm-away",
|
|
13485
|
+
"arm-night",
|
|
13447
13486
|
"disarm",
|
|
13448
13487
|
"light",
|
|
13449
|
-
"alert"
|
|
13488
|
+
"alert",
|
|
13489
|
+
"camera"
|
|
13450
13490
|
]);
|
|
13451
13491
|
/** A single tap-through action button. */
|
|
13452
13492
|
var NotificationActionSchema = object({
|
|
@@ -13462,7 +13502,23 @@ var NotificationActionSchema = object({
|
|
|
13462
13502
|
* else — see `notification-center/action-token.ts` for what that does and
|
|
13463
13503
|
* does not buy.
|
|
13464
13504
|
*/
|
|
13465
|
-
destructive: boolean().optional()
|
|
13505
|
+
destructive: boolean().optional(),
|
|
13506
|
+
/**
|
|
13507
|
+
* How the tap should REACH the url.
|
|
13508
|
+
*
|
|
13509
|
+
* `navigate` (absent, and every button authored before this field) opens it:
|
|
13510
|
+
* the phone leaves the notification and shows whatever the callback returns.
|
|
13511
|
+
* That is right for a button whose answer the operator wants to read.
|
|
13512
|
+
*
|
|
13513
|
+
* `background` fires it as a POST and stays put. It exists for the buttons
|
|
13514
|
+
* whose whole point is not to interrupt — "silence this for 30 minutes" is
|
|
13515
|
+
* an answer to the notification, and being thrown into a browser tab to
|
|
13516
|
+
* confirm it costs more attention than the notification did. A backend that
|
|
13517
|
+
* cannot do a background call renders it as an ordinary link (the adapters
|
|
13518
|
+
* fall back rather than dropping the button), so this is a preference, never
|
|
13519
|
+
* a requirement.
|
|
13520
|
+
*/
|
|
13521
|
+
mode: _enum(["navigate", "background"]).optional()
|
|
13466
13522
|
});
|
|
13467
13523
|
/**
|
|
13468
13524
|
* The canonical notification. `body` is the only hard field (Apprise model).
|
|
@@ -13648,6 +13704,29 @@ var MACRO_LABELS = [
|
|
|
13648
13704
|
name: "Package"
|
|
13649
13705
|
}
|
|
13650
13706
|
];
|
|
13707
|
+
/**
|
|
13708
|
+
* The class names a per-class COUNT can ever be keyed on — the macro ids, and
|
|
13709
|
+
* only those.
|
|
13710
|
+
*
|
|
13711
|
+
* `preserveOriginal: false` below is the whole reason this set exists: the
|
|
13712
|
+
* executor maps each raw COCO label onto its macro and DROPS everything else,
|
|
13713
|
+
* so a tracked detection's `className` is always one of {@link MACRO_LABELS}.
|
|
13714
|
+
* Any surface that indexes counts by class name — the ZoneAnalytics occupancy
|
|
13715
|
+
* snapshot's `byClass`, and therefore every occupancy rule — can match nothing
|
|
13716
|
+
* else. Derived from the catalog, never hand-listed, so a new macro joins it by
|
|
13717
|
+
* being declared once.
|
|
13718
|
+
*
|
|
13719
|
+
* Cost of not having it, 2026-08-12: the notification rule editor offered the
|
|
13720
|
+
* full taxonomy for an occupancy class (occupancy is the one condition that
|
|
13721
|
+
* does not go through the engine's macro-expanding `expandClassSelector`), two
|
|
13722
|
+
* live rules were authored on `car`, and both counters read 0 forever.
|
|
13723
|
+
*/
|
|
13724
|
+
var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
|
|
13725
|
+
/** True when `className` is a macro the detector can actually emit (and hence a
|
|
13726
|
+
* class a count can be keyed on) — see {@link DETECTION_MACRO_CLASSES}. */
|
|
13727
|
+
function isDetectionMacroClass(className) {
|
|
13728
|
+
return DETECTION_MACRO_CLASSES.has(className.trim().toLowerCase());
|
|
13729
|
+
}
|
|
13651
13730
|
var COCO_TO_MACRO = {
|
|
13652
13731
|
mapping: {
|
|
13653
13732
|
person: "person",
|
|
@@ -14341,7 +14420,17 @@ var alarmPanelCapability = {
|
|
|
14341
14420
|
* full slice; renders an arm button per `availableModes` entry and
|
|
14342
14421
|
* a PIN field iff `requiresCode === true`.
|
|
14343
14422
|
*/
|
|
14344
|
-
runtimeState: AlarmPanelStatusSchema
|
|
14423
|
+
runtimeState: AlarmPanelStatusSchema,
|
|
14424
|
+
/**
|
|
14425
|
+
* Runtime-state durability: **restored** — armed state is the one thing a panel must not lose across a restart.
|
|
14426
|
+
*
|
|
14427
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
14428
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
14429
|
+
*/
|
|
14430
|
+
durability: "restored",
|
|
14431
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
14432
|
+
* whether persisting is worth a SQLite commit. */
|
|
14433
|
+
volatileStateFields: ["lastChangedAt"]
|
|
14345
14434
|
};
|
|
14346
14435
|
/**
|
|
14347
14436
|
* Shared geometry vocabulary for on-frame shape caps — privacy-mask,
|
|
@@ -14482,6 +14571,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
14482
14571
|
"alarm-triggered",
|
|
14483
14572
|
"alarm-armed",
|
|
14484
14573
|
"alarm-disarmed",
|
|
14574
|
+
"alarm-arming",
|
|
14575
|
+
"alarm-arm-refused",
|
|
14485
14576
|
"camera-online",
|
|
14486
14577
|
"camera-offline",
|
|
14487
14578
|
"camera-disabled",
|
|
@@ -14496,6 +14587,25 @@ var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
|
|
|
14496
14587
|
]);
|
|
14497
14588
|
NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
|
|
14498
14589
|
/**
|
|
14590
|
+
* The panel's transitions, as ONE list.
|
|
14591
|
+
*
|
|
14592
|
+
* Named here rather than spelled out at each of the four sites that need them
|
|
14593
|
+
* (the emitter, the intake, the editor group, the combined-notification gate),
|
|
14594
|
+
* because a transition added to the enum and forgotten at one of them is an
|
|
14595
|
+
* alarm state nobody can be notified about. That is exactly what this list
|
|
14596
|
+
* failed to prevent while it held three: `alarm-arming` was the fourth.
|
|
14597
|
+
*
|
|
14598
|
+
* In LIFECYCLE order, which is the order an editor lists them in and the order
|
|
14599
|
+
* a person experiences them — not the order they were added.
|
|
14600
|
+
*/
|
|
14601
|
+
var NC_ALARM_SYSTEM_EVENT_KINDS = [
|
|
14602
|
+
"alarm-arm-refused",
|
|
14603
|
+
"alarm-arming",
|
|
14604
|
+
"alarm-armed",
|
|
14605
|
+
"alarm-triggered",
|
|
14606
|
+
"alarm-disarmed"
|
|
14607
|
+
];
|
|
14608
|
+
/**
|
|
14499
14609
|
* One coherent system-event condition. `kinds` is the required opt-in safety
|
|
14500
14610
|
* gate; the remaining lists are optional narrowing filters relevant to the
|
|
14501
14611
|
* selected kinds.
|
|
@@ -14518,6 +14628,26 @@ var NcSystemEventConditionSchema = object({
|
|
|
14518
14628
|
nodeIds: array(string().min(1)).min(1).optional(),
|
|
14519
14629
|
packageNames: array(string().min(1)).min(1).optional()
|
|
14520
14630
|
});
|
|
14631
|
+
/** Hard ceiling on a window (24h). A snooze that could not expire would be an
|
|
14632
|
+
* outage the operator asked for once and forgot. */
|
|
14633
|
+
var NC_SNOOZE_MAX_MINUTES = 1440;
|
|
14634
|
+
/**
|
|
14635
|
+
* The durations a notification offers when its rule does not say otherwise.
|
|
14636
|
+
*
|
|
14637
|
+
* MINUTES, and short ones: a snooze button is answered on a lock screen, and
|
|
14638
|
+
* the three choices that fit there are "the next few minutes", "the next half
|
|
14639
|
+
* hour" and "the next hour". Anything longer is a decision somebody sits down
|
|
14640
|
+
* to make, which is what the app's own snooze surface is for.
|
|
14641
|
+
*
|
|
14642
|
+
* Resolved in CODE (`snoozeChoices`), never as a Zod default — see
|
|
14643
|
+
* {@link NcRuleInputSchema.shape.snoozeOptions} for why the distinction is
|
|
14644
|
+
* load-bearing.
|
|
14645
|
+
*/
|
|
14646
|
+
var NC_DEFAULT_SNOOZE_MINUTES = [
|
|
14647
|
+
10,
|
|
14648
|
+
30,
|
|
14649
|
+
60
|
|
14650
|
+
];
|
|
14521
14651
|
/** Weekly schedule — OR of windows; absence on the rule = always active. */
|
|
14522
14652
|
var NcScheduleSchema = object({
|
|
14523
14653
|
windows: array(object({
|
|
@@ -14894,15 +15024,15 @@ var NcConditionsSchema = object({
|
|
|
14894
15024
|
* (an `immediate` rule naming an `audio-*` class, one notification per
|
|
14895
15025
|
* classified sample) stays exactly as it was for rules that already use it.
|
|
14896
15026
|
*
|
|
14897
|
-
*
|
|
14898
|
-
* rather than an
|
|
14899
|
-
* (`camstack/src/data/notification-center.ts`, guarded by
|
|
14900
|
-
* `scripts/check-viewer-condition-mirror.ts`) and its rule editor
|
|
15027
|
+
* In {@link NC_CONDITION_CATALOG} since P2, and the ORDER it got there is the
|
|
15028
|
+
* rule rather than an accident: the viewer mirrors the descriptor enums BY
|
|
15029
|
+
* HAND (`camstack/src/data/notification-center.ts`, guarded by
|
|
15030
|
+
* `scripts/check-viewer-condition-mirror.ts`) and its rule editor strips the
|
|
14901
15031
|
* condition fields it does not know when a rule is saved from the phone.
|
|
14902
15032
|
* Publishing an editor for a condition the app cannot round-trip is how an
|
|
14903
|
-
* operator loses a rule's conditions by opening it — so the
|
|
14904
|
-
*
|
|
14905
|
-
*
|
|
15033
|
+
* operator loses a rule's conditions by opening it — so the viewer mirror
|
|
15034
|
+
* (P3, shipped) went FIRST, and the descriptor an editor renders from
|
|
15035
|
+
* follows here.
|
|
14906
15036
|
*/
|
|
14907
15037
|
audio: NcAudioConditionSchema.optional()
|
|
14908
15038
|
});
|
|
@@ -15138,6 +15268,30 @@ var NcRuleInputSchema = object({
|
|
|
15138
15268
|
*/
|
|
15139
15269
|
snoozeAllowGlobal: boolean().optional(),
|
|
15140
15270
|
/**
|
|
15271
|
+
* The snooze durations THIS rule's notification offers as buttons, in
|
|
15272
|
+
* minutes.
|
|
15273
|
+
*
|
|
15274
|
+
* Three states, and all three are distinct — which is exactly why this is
|
|
15275
|
+
* `.optional()` and never `.default()`. A Zod default does not run on the
|
|
15276
|
+
* addon cap path (three production failures in one day), so a schema default
|
|
15277
|
+
* would collapse the first two:
|
|
15278
|
+
*
|
|
15279
|
+
* | value | meaning |
|
|
15280
|
+
* | --- | --- |
|
|
15281
|
+
* | absent | the operator never said ⇒ {@link NC_DEFAULT_SNOOZE_MINUTES} |
|
|
15282
|
+
* | `[]` | **no snooze buttons on this rule** — the explicit override |
|
|
15283
|
+
* | a list | these choices, de-duplicated and sorted, at most four |
|
|
15284
|
+
*
|
|
15285
|
+
* `.max(4)` because the notifier's own action budget is small (ntfy allows
|
|
15286
|
+
* three buttons in total) and a rule that spent it all on snooze choices
|
|
15287
|
+
* would push its own tap-through actions off the notification.
|
|
15288
|
+
*
|
|
15289
|
+
* An empty list is NOT an alarm exemption: a rule the alarm is about, or
|
|
15290
|
+
* that arms the panel, is exempt automatically and cannot be silenced by a
|
|
15291
|
+
* window from anywhere (D133).
|
|
15292
|
+
*/
|
|
15293
|
+
snoozeOptions: array(number().int().min(1).max(NC_SNOOZE_MAX_MINUTES)).max(4).optional(),
|
|
15294
|
+
/**
|
|
15141
15295
|
* Devices this rule ACTUATES — arm the alarm, open a gate, turn on a light.
|
|
15142
15296
|
*
|
|
15143
15297
|
* This is what makes the rule set the alarm's trigger set without the alarm
|
|
@@ -15237,6 +15391,7 @@ var NcConditionDescriptorSchema = object({
|
|
|
15237
15391
|
"device",
|
|
15238
15392
|
"package",
|
|
15239
15393
|
"occupancy",
|
|
15394
|
+
"audio",
|
|
15240
15395
|
"system"
|
|
15241
15396
|
]),
|
|
15242
15397
|
label: string(),
|
|
@@ -15255,6 +15410,7 @@ var NcConditionDescriptorSchema = object({
|
|
|
15255
15410
|
"crossingSelect",
|
|
15256
15411
|
"polygonDraw",
|
|
15257
15412
|
"occupancy",
|
|
15413
|
+
"audio",
|
|
15258
15414
|
"deviceState",
|
|
15259
15415
|
"systemEvent"
|
|
15260
15416
|
]),
|
|
@@ -15345,13 +15501,17 @@ var NC_CONDITION_CATALOG = [
|
|
|
15345
15501
|
label: "Server update available"
|
|
15346
15502
|
},
|
|
15347
15503
|
{
|
|
15348
|
-
value: "alarm-
|
|
15349
|
-
label: "Alarm
|
|
15504
|
+
value: "alarm-arming",
|
|
15505
|
+
label: "Alarm arming (exit delay)"
|
|
15350
15506
|
},
|
|
15351
15507
|
{
|
|
15352
15508
|
value: "alarm-armed",
|
|
15353
15509
|
label: "Alarm armed"
|
|
15354
15510
|
},
|
|
15511
|
+
{
|
|
15512
|
+
value: "alarm-triggered",
|
|
15513
|
+
label: "Alarm triggered"
|
|
15514
|
+
},
|
|
15355
15515
|
{
|
|
15356
15516
|
value: "alarm-disarmed",
|
|
15357
15517
|
label: "Alarm disarmed"
|
|
@@ -15652,6 +15812,16 @@ var NC_CONDITION_CATALOG = [
|
|
|
15652
15812
|
phase: "P1",
|
|
15653
15813
|
description: "ZoneAnalytics occupancy edge (optionally zone/class-scoped): count crosses the threshold and holds for sustainSeconds. Fail-closed on a missing snapshot."
|
|
15654
15814
|
},
|
|
15815
|
+
{
|
|
15816
|
+
id: "audio",
|
|
15817
|
+
group: "audio",
|
|
15818
|
+
label: "Sound",
|
|
15819
|
+
valueType: "audio",
|
|
15820
|
+
operator: "anyOf",
|
|
15821
|
+
appliesTo: ["immediate"],
|
|
15822
|
+
phase: "P2",
|
|
15823
|
+
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)."
|
|
15824
|
+
},
|
|
15655
15825
|
{
|
|
15656
15826
|
id: "customZones",
|
|
15657
15827
|
group: "zones",
|
|
@@ -15796,7 +15966,20 @@ var NcSnoozeInputSchema = object({
|
|
|
15796
15966
|
ruleId: string().optional(),
|
|
15797
15967
|
/** Required when `scope: 'device'`. */
|
|
15798
15968
|
deviceId: number().int().optional(),
|
|
15799
|
-
|
|
15969
|
+
/**
|
|
15970
|
+
* Narrow the window to these subject classes — "the cat, not the person".
|
|
15971
|
+
*
|
|
15972
|
+
* ORTHOGONAL to `scope`, deliberately, and absent means EVERY class: that is
|
|
15973
|
+
* what every window authored before this field meant, so no persisted row
|
|
15974
|
+
* changes meaning and no client has to learn anything to keep working.
|
|
15975
|
+
*
|
|
15976
|
+
* It is what makes the window's real key `(deviceId, classes[])` and lets it
|
|
15977
|
+
* cross rules (D133): the operator points at a camera and a kind of thing,
|
|
15978
|
+
* not at whichever of their four rules happened to produce the notification
|
|
15979
|
+
* they are dismissing.
|
|
15980
|
+
*/
|
|
15981
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15982
|
+
durationMinutes: number().int().min(1).max(NC_SNOOZE_MAX_MINUTES),
|
|
15800
15983
|
/**
|
|
15801
15984
|
* Silence this for EVERY recipient, not just the caller. Permission is
|
|
15802
15985
|
* checked server-side (the rule's `snoozeAllowGlobal`, or admin for the
|
|
@@ -15821,6 +16004,10 @@ var NcSnoozeSchema = object({
|
|
|
15821
16004
|
scope: NcSnoozeScopeSchema,
|
|
15822
16005
|
ruleId: string().optional(),
|
|
15823
16006
|
deviceId: number().int().optional(),
|
|
16007
|
+
/** Subject classes this window covers. ABSENT = every class — see
|
|
16008
|
+
* {@link NcSnoozeInputSchema.shape.classes}. Lives in the JSON blob and has
|
|
16009
|
+
* no SQLite column: nothing queries a window by class. */
|
|
16010
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15824
16011
|
startedAt: number(),
|
|
15825
16012
|
/** Exclusive: at exactly this instant the snooze is over. Expiry is a
|
|
15826
16013
|
* COMPARISON, not a job — no sweeper can leave the operator silenced. */
|
|
@@ -18417,7 +18604,14 @@ var zonesCapability = {
|
|
|
18417
18604
|
* handle. Slice shape is `{ zones: Zone[] }` so future extensions
|
|
18418
18605
|
* (e.g. zone groupings) can sit alongside the polygon list.
|
|
18419
18606
|
*/
|
|
18420
|
-
runtimeState: object({ zones: array(ZoneSchema).readonly() })
|
|
18607
|
+
runtimeState: object({ zones: array(ZoneSchema).readonly() }),
|
|
18608
|
+
/**
|
|
18609
|
+
* 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.
|
|
18610
|
+
*
|
|
18611
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
18612
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
18613
|
+
*/
|
|
18614
|
+
durability: "restored"
|
|
18421
18615
|
};
|
|
18422
18616
|
/**
|
|
18423
18617
|
* A bounding box in NORMALIZED [0,1] frame coordinates for `getNativeCrop`. The
|
|
@@ -18587,6 +18781,22 @@ var detectionFpsField = {
|
|
|
18587
18781
|
default: 10,
|
|
18588
18782
|
step: 1
|
|
18589
18783
|
};
|
|
18784
|
+
/**
|
|
18785
|
+
* The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
|
|
18786
|
+
*
|
|
18787
|
+
* The recheck is now on by default (a parked car is invisible to occupancy
|
|
18788
|
+
* rules until the stationary registry has been rebuilt by motion, which after a
|
|
18789
|
+
* restart may be never on a quiet camera). Each cycle re-subscribes a detection
|
|
18790
|
+
* session — an RTSP re-dial — so the switch is only affordable at a WIDE
|
|
18791
|
+
* interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
|
|
18792
|
+
* 30 s. A parked car is therefore counted within 5 minutes of a restart.
|
|
18793
|
+
*
|
|
18794
|
+
* Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
|
|
18795
|
+
* the host validates `attachCamera` against ITS copy of this schema, so a
|
|
18796
|
+
* runner asked for 600 would be rejected by the hub until a `@camstack/server`
|
|
18797
|
+
* carrying the wider bound is installed everywhere. 300 is the widest value
|
|
18798
|
+
* that ships with an addon deploy.
|
|
18799
|
+
*/
|
|
18590
18800
|
var occupancyRecheckSecField = {
|
|
18591
18801
|
min: 0,
|
|
18592
18802
|
max: 300,
|
|
@@ -18788,15 +18998,21 @@ var RunnerCameraConfigSchema = object({
|
|
|
18788
18998
|
*/
|
|
18789
18999
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
18790
19000
|
/**
|
|
18791
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
18792
|
-
*
|
|
18793
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
18794
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
18795
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
19001
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
19002
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
18796
19003
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
18797
19004
|
* (and only render) when this is enabled.
|
|
18798
|
-
|
|
18799
|
-
|
|
19005
|
+
*
|
|
19006
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
19007
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
19008
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
19009
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
19010
|
+
* object is counted only while the stationary registry holds it, and the
|
|
19011
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
19012
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
19013
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
19014
|
+
*/
|
|
19015
|
+
occupancyRecheckEnabled: boolean().default(true),
|
|
18800
19016
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
18801
19017
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
18802
19018
|
/**
|
|
@@ -21260,7 +21476,17 @@ var airQualitySensorCapability = {
|
|
|
21260
21476
|
schema: AirQualitySensorStatusSchema,
|
|
21261
21477
|
kind: "push"
|
|
21262
21478
|
},
|
|
21263
|
-
runtimeState: AirQualitySensorStatusSchema
|
|
21479
|
+
runtimeState: AirQualitySensorStatusSchema,
|
|
21480
|
+
/**
|
|
21481
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`.
|
|
21482
|
+
*
|
|
21483
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21484
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21485
|
+
*/
|
|
21486
|
+
durability: "restored",
|
|
21487
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21488
|
+
* whether persisting is worth a SQLite commit. */
|
|
21489
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
21264
21490
|
};
|
|
21265
21491
|
/**
|
|
21266
21492
|
* Ambient illuminance reading in lux. Drives Home Assistant `sensor`
|
|
@@ -21292,7 +21518,17 @@ var ambientLightSensorCapability = {
|
|
|
21292
21518
|
schema: AmbientLightSensorStatusSchema,
|
|
21293
21519
|
kind: "push"
|
|
21294
21520
|
},
|
|
21295
|
-
runtimeState: AmbientLightSensorStatusSchema
|
|
21521
|
+
runtimeState: AmbientLightSensorStatusSchema,
|
|
21522
|
+
/**
|
|
21523
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`.
|
|
21524
|
+
*
|
|
21525
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21526
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21527
|
+
*/
|
|
21528
|
+
durability: "restored",
|
|
21529
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21530
|
+
* whether persisting is worth a SQLite commit. */
|
|
21531
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
21296
21532
|
};
|
|
21297
21533
|
/**
|
|
21298
21534
|
* Per-class audio metrics aggregated over a sliding window.
|
|
@@ -21410,7 +21646,14 @@ var audioMetricsCapability = {
|
|
|
21410
21646
|
}), AudioMetricsHistorySchema)
|
|
21411
21647
|
},
|
|
21412
21648
|
/** Reactive runtime-state mirror — live `device.state.audioMetrics.value`. */
|
|
21413
|
-
runtimeState: AudioMetricsSnapshotSchema
|
|
21649
|
+
runtimeState: AudioMetricsSnapshotSchema,
|
|
21650
|
+
/**
|
|
21651
|
+
* 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.
|
|
21652
|
+
*
|
|
21653
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21654
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21655
|
+
*/
|
|
21656
|
+
durability: "session"
|
|
21414
21657
|
};
|
|
21415
21658
|
/**
|
|
21416
21659
|
* Automation-control cap. Models HA `automation.*` entities on
|
|
@@ -21472,7 +21715,14 @@ var automationControlCapability = {
|
|
|
21472
21715
|
* reads `enabled` (toggle) + `isRunning` (spinner) + `lastError`
|
|
21473
21716
|
* (badge) directly.
|
|
21474
21717
|
*/
|
|
21475
|
-
runtimeState: AutomationControlStatusSchema
|
|
21718
|
+
runtimeState: AutomationControlStatusSchema,
|
|
21719
|
+
/**
|
|
21720
|
+
* 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.
|
|
21721
|
+
*
|
|
21722
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21723
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21724
|
+
*/
|
|
21725
|
+
durability: "session"
|
|
21476
21726
|
};
|
|
21477
21727
|
/**
|
|
21478
21728
|
* Battery status snapshot. Emitted by providers whose device is
|
|
@@ -21578,7 +21828,17 @@ onStatusChanged: { data: object({
|
|
|
21578
21828
|
* via `device.runtimeState.getCapState('battery')` regardless of
|
|
21579
21829
|
* the underlying driver.
|
|
21580
21830
|
*/
|
|
21581
|
-
runtimeState: BatteryStatusSchema
|
|
21831
|
+
runtimeState: BatteryStatusSchema,
|
|
21832
|
+
/**
|
|
21833
|
+
* 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.
|
|
21834
|
+
*
|
|
21835
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21836
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21837
|
+
*/
|
|
21838
|
+
durability: "restored",
|
|
21839
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21840
|
+
* whether persisting is worth a SQLite commit. */
|
|
21841
|
+
volatileStateFields: ["lastUpdated"]
|
|
21582
21842
|
};
|
|
21583
21843
|
/**
|
|
21584
21844
|
* Generic boolean sensor — last-resort fallback when no domain-
|
|
@@ -21607,7 +21867,17 @@ var binaryCapability = {
|
|
|
21607
21867
|
schema: BinaryStatusSchema,
|
|
21608
21868
|
kind: "push"
|
|
21609
21869
|
},
|
|
21610
|
-
runtimeState: BinaryStatusSchema
|
|
21870
|
+
runtimeState: BinaryStatusSchema,
|
|
21871
|
+
/**
|
|
21872
|
+
* Runtime-state durability: **restored** — transition-driven sensor state; the restored value gives the boot comparison.
|
|
21873
|
+
*
|
|
21874
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21875
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21876
|
+
*/
|
|
21877
|
+
durability: "restored",
|
|
21878
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
21879
|
+
* whether persisting is worth a SQLite commit. */
|
|
21880
|
+
volatileStateFields: ["lastChangedAt"]
|
|
21611
21881
|
};
|
|
21612
21882
|
/**
|
|
21613
21883
|
* Dimmable-light brightness control. Co-exists with `switch` on the
|
|
@@ -21660,7 +21930,14 @@ onBrightnessChanged: { data: object({
|
|
|
21660
21930
|
* by the kernel. Read via `device.state.brightness.value` so UI
|
|
21661
21931
|
* sliders surface the current level without polling the provider.
|
|
21662
21932
|
*/
|
|
21663
|
-
runtimeState: BrightnessStatusSchema
|
|
21933
|
+
runtimeState: BrightnessStatusSchema,
|
|
21934
|
+
/**
|
|
21935
|
+
* Runtime-state durability: **session** — live lamp state, re-published by the provider on connect.
|
|
21936
|
+
*
|
|
21937
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
21938
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
21939
|
+
*/
|
|
21940
|
+
durability: "session"
|
|
21664
21941
|
};
|
|
21665
21942
|
DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
21666
21943
|
kind: "mutation",
|
|
@@ -21748,7 +22025,17 @@ var carbonMonoxideCapability = {
|
|
|
21748
22025
|
schema: CarbonMonoxideStatusSchema,
|
|
21749
22026
|
kind: "push"
|
|
21750
22027
|
},
|
|
21751
|
-
runtimeState: CarbonMonoxideStatusSchema
|
|
22028
|
+
runtimeState: CarbonMonoxideStatusSchema,
|
|
22029
|
+
/**
|
|
22030
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
22031
|
+
*
|
|
22032
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22033
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22034
|
+
*/
|
|
22035
|
+
durability: "restored",
|
|
22036
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22037
|
+
* whether persisting is worth a SQLite commit. */
|
|
22038
|
+
volatileStateFields: ["lastChangedAt"]
|
|
21752
22039
|
};
|
|
21753
22040
|
/**
|
|
21754
22041
|
* HVAC / climate control cap. Models the full surface of a HA
|
|
@@ -21908,7 +22195,14 @@ var climateControlCapability = {
|
|
|
21908
22195
|
* the full slice via `device.state.climate-control.value` and refresh
|
|
21909
22196
|
* on every push without re-querying the provider.
|
|
21910
22197
|
*/
|
|
21911
|
-
runtimeState: ClimateControlStatusSchema
|
|
22198
|
+
runtimeState: ClimateControlStatusSchema,
|
|
22199
|
+
/**
|
|
22200
|
+
* Runtime-state durability: **session** — as `brightness`; `currentTemp` moves continuously and is re-published on connect.
|
|
22201
|
+
*
|
|
22202
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22203
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22204
|
+
*/
|
|
22205
|
+
durability: "session"
|
|
21912
22206
|
};
|
|
21913
22207
|
/**
|
|
21914
22208
|
* Color-light cap. Coexists with `switch` (on/off) and `brightness`
|
|
@@ -22018,7 +22312,14 @@ onColorChanged: { data: object({
|
|
|
22018
22312
|
* kernel. Read via `device.state.color.value` so UI pickers surface
|
|
22019
22313
|
* the current chromaticity without polling the provider.
|
|
22020
22314
|
*/
|
|
22021
|
-
runtimeState: ColorStatusSchema
|
|
22315
|
+
runtimeState: ColorStatusSchema,
|
|
22316
|
+
/**
|
|
22317
|
+
* Runtime-state durability: **session** — as `brightness`.
|
|
22318
|
+
*
|
|
22319
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22320
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22321
|
+
*/
|
|
22322
|
+
durability: "session"
|
|
22022
22323
|
};
|
|
22023
22324
|
var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
|
|
22024
22325
|
object({
|
|
@@ -22076,7 +22377,17 @@ var connectivityCapability = {
|
|
|
22076
22377
|
schema: ConnectivityStatusSchema,
|
|
22077
22378
|
kind: "push"
|
|
22078
22379
|
},
|
|
22079
|
-
runtimeState: ConnectivityStatusSchema
|
|
22380
|
+
runtimeState: ConnectivityStatusSchema,
|
|
22381
|
+
/**
|
|
22382
|
+
* Runtime-state durability: **restored** — same shape and same argument as `device-status`, for links rather than devices.
|
|
22383
|
+
*
|
|
22384
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22385
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22386
|
+
*/
|
|
22387
|
+
durability: "restored",
|
|
22388
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22389
|
+
* whether persisting is worth a SQLite commit. */
|
|
22390
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22080
22391
|
};
|
|
22081
22392
|
/**
|
|
22082
22393
|
* Generic device-consumables capability — surfaces a device's
|
|
@@ -22158,7 +22469,14 @@ reset: method(object({
|
|
|
22158
22469
|
}
|
|
22159
22470
|
}
|
|
22160
22471
|
},
|
|
22161
|
-
runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: number() })
|
|
22472
|
+
runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: number() }),
|
|
22473
|
+
/**
|
|
22474
|
+
* Runtime-state durability: **session** — the authority is the appliance; the provider re-reads the whole item array on connect.
|
|
22475
|
+
*
|
|
22476
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22477
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22478
|
+
*/
|
|
22479
|
+
durability: "session"
|
|
22162
22480
|
};
|
|
22163
22481
|
/**
|
|
22164
22482
|
* Door / window / opening / garage / valve contact sensor. Boolean
|
|
@@ -22189,7 +22507,17 @@ var contactCapability = {
|
|
|
22189
22507
|
schema: ContactStatusSchema,
|
|
22190
22508
|
kind: "push"
|
|
22191
22509
|
},
|
|
22192
|
-
runtimeState: ContactStatusSchema
|
|
22510
|
+
runtimeState: ContactStatusSchema,
|
|
22511
|
+
/**
|
|
22512
|
+
* Runtime-state durability: **restored** — a door left open across a restart must still read open.
|
|
22513
|
+
*
|
|
22514
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22515
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22516
|
+
*/
|
|
22517
|
+
durability: "restored",
|
|
22518
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22519
|
+
* whether persisting is worth a SQLite commit. */
|
|
22520
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22193
22521
|
};
|
|
22194
22522
|
/**
|
|
22195
22523
|
* Status slice — flat object (the framework's `runtimeState` contract
|
|
@@ -22295,7 +22623,14 @@ var controlCapability = {
|
|
|
22295
22623
|
* dropdown / text field / date picker) read the slice's discriminant
|
|
22296
22624
|
* and value directly without polling the provider.
|
|
22297
22625
|
*/
|
|
22298
|
-
runtimeState: ControlStatusSchema
|
|
22626
|
+
runtimeState: ControlStatusSchema,
|
|
22627
|
+
/**
|
|
22628
|
+
* Runtime-state durability: **session** — a generic control mirrors an external entity that re-publishes on connect; the options array is re-derived with it.
|
|
22629
|
+
*
|
|
22630
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22631
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22632
|
+
*/
|
|
22633
|
+
durability: "session"
|
|
22299
22634
|
};
|
|
22300
22635
|
var CoverStatusSchema = object({
|
|
22301
22636
|
/** Lifecycle state of the cover. */
|
|
@@ -22356,7 +22691,17 @@ var coverCapability = {
|
|
|
22356
22691
|
* Runtime-state slice — mirrored by the kernel. UI controls watch
|
|
22357
22692
|
* the slice for live position changes during a move.
|
|
22358
22693
|
*/
|
|
22359
|
-
runtimeState: CoverStatusSchema
|
|
22694
|
+
runtimeState: CoverStatusSchema,
|
|
22695
|
+
/**
|
|
22696
|
+
* Runtime-state durability: **restored** — position survives a restart on the device; the mirror should agree at boot rather than read blank.
|
|
22697
|
+
*
|
|
22698
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22699
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22700
|
+
*/
|
|
22701
|
+
durability: "restored",
|
|
22702
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22703
|
+
* whether persisting is worth a SQLite commit. */
|
|
22704
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22360
22705
|
};
|
|
22361
22706
|
/**
|
|
22362
22707
|
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
@@ -22450,7 +22795,17 @@ var dayNightCapability = {
|
|
|
22450
22795
|
schema: DayNightStatusSchema,
|
|
22451
22796
|
kind: "poll"
|
|
22452
22797
|
},
|
|
22453
|
-
runtimeState: DayNightStatusSchema
|
|
22798
|
+
runtimeState: DayNightStatusSchema,
|
|
22799
|
+
/**
|
|
22800
|
+
* Runtime-state durability: **restored** — operator-set IR-cut behaviour; mutation-driven.
|
|
22801
|
+
*
|
|
22802
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22803
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22804
|
+
*/
|
|
22805
|
+
durability: "restored",
|
|
22806
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22807
|
+
* whether persisting is worth a SQLite commit. */
|
|
22808
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
22454
22809
|
};
|
|
22455
22810
|
/**
|
|
22456
22811
|
* Generic device-level status snapshot. Auto-registered by `BaseDevice`
|
|
@@ -22497,7 +22852,17 @@ onStatusChanged: { data: object({
|
|
|
22497
22852
|
schema: DeviceStatusSchema,
|
|
22498
22853
|
kind: "push"
|
|
22499
22854
|
},
|
|
22500
|
-
runtimeState: DeviceStatusSchema
|
|
22855
|
+
runtimeState: DeviceStatusSchema,
|
|
22856
|
+
/**
|
|
22857
|
+
* 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.
|
|
22858
|
+
*
|
|
22859
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22860
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22861
|
+
*/
|
|
22862
|
+
durability: "restored",
|
|
22863
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22864
|
+
* whether persisting is worth a SQLite commit. */
|
|
22865
|
+
volatileStateFields: ["lastChangedAt"]
|
|
22501
22866
|
};
|
|
22502
22867
|
/**
|
|
22503
22868
|
* Doorbell button cap. Two kinds of providers coexist behind this cap
|
|
@@ -22559,7 +22924,14 @@ onPressed: { data: DoorbellPressEventSchema } },
|
|
|
22559
22924
|
* `device.state.doorbell.value`. UIs can show "last ring 5m ago"
|
|
22560
22925
|
* without subscribing.
|
|
22561
22926
|
*/
|
|
22562
|
-
runtimeState: DoorbellStatusSchema
|
|
22927
|
+
runtimeState: DoorbellStatusSchema,
|
|
22928
|
+
/**
|
|
22929
|
+
* 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.
|
|
22930
|
+
*
|
|
22931
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22932
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22933
|
+
*/
|
|
22934
|
+
durability: "restored"
|
|
22563
22935
|
};
|
|
22564
22936
|
/**
|
|
22565
22937
|
* Enum-state sensor — a string value picked from a finite option set.
|
|
@@ -22599,7 +22971,17 @@ var enumSensorCapability = {
|
|
|
22599
22971
|
schema: EnumSensorStatusSchema,
|
|
22600
22972
|
kind: "push"
|
|
22601
22973
|
},
|
|
22602
|
-
runtimeState: EnumSensorStatusSchema
|
|
22974
|
+
runtimeState: EnumSensorStatusSchema,
|
|
22975
|
+
/**
|
|
22976
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; 80 devices.
|
|
22977
|
+
*
|
|
22978
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22979
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22980
|
+
*/
|
|
22981
|
+
durability: "restored",
|
|
22982
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22983
|
+
* whether persisting is worth a SQLite commit. */
|
|
22984
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
22603
22985
|
};
|
|
22604
22986
|
/**
|
|
22605
22987
|
* Generic stateless event emitter. Installed on a `DeviceType.EventEmitter`
|
|
@@ -22635,7 +23017,14 @@ var eventEmitterCapability = {
|
|
|
22635
23017
|
schema: EventEmitterStatusSchema,
|
|
22636
23018
|
kind: "push"
|
|
22637
23019
|
},
|
|
22638
|
-
runtimeState: EventEmitterStatusSchema
|
|
23020
|
+
runtimeState: EventEmitterStatusSchema,
|
|
23021
|
+
/**
|
|
23022
|
+
* Runtime-state durability: **session** — `eventCountSinceStart` names its own scope.
|
|
23023
|
+
*
|
|
23024
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23025
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23026
|
+
*/
|
|
23027
|
+
durability: "session"
|
|
22639
23028
|
};
|
|
22640
23029
|
var EventItemSchema = object({
|
|
22641
23030
|
id: string(),
|
|
@@ -22942,7 +23331,14 @@ var fanControlCapability = {
|
|
|
22942
23331
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
22943
23332
|
* sliders read `percentage` for live updates.
|
|
22944
23333
|
*/
|
|
22945
|
-
runtimeState: FanControlStatusSchema
|
|
23334
|
+
runtimeState: FanControlStatusSchema,
|
|
23335
|
+
/**
|
|
23336
|
+
* Runtime-state durability: **session** — as `brightness`.
|
|
23337
|
+
*
|
|
23338
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23339
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23340
|
+
*/
|
|
23341
|
+
durability: "session"
|
|
22946
23342
|
};
|
|
22947
23343
|
/**
|
|
22948
23344
|
* Per-device feature/identity probe slice. Holds the runtime-resolved
|
|
@@ -23018,7 +23414,14 @@ onProbeChanged: { data: object({
|
|
|
23018
23414
|
schema: FeatureProbeStatusSchema,
|
|
23019
23415
|
kind: "push"
|
|
23020
23416
|
},
|
|
23021
|
-
runtimeState: FeatureProbeStatusSchema
|
|
23417
|
+
runtimeState: FeatureProbeStatusSchema,
|
|
23418
|
+
/**
|
|
23419
|
+
* 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.
|
|
23420
|
+
*
|
|
23421
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23422
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23423
|
+
*/
|
|
23424
|
+
durability: "session"
|
|
23022
23425
|
};
|
|
23023
23426
|
/**
|
|
23024
23427
|
* Water leak / moisture sensor. Boolean "is liquid currently
|
|
@@ -23045,7 +23448,17 @@ var floodCapability = {
|
|
|
23045
23448
|
schema: FloodStatusSchema,
|
|
23046
23449
|
kind: "push"
|
|
23047
23450
|
},
|
|
23048
|
-
runtimeState: FloodStatusSchema
|
|
23451
|
+
runtimeState: FloodStatusSchema,
|
|
23452
|
+
/**
|
|
23453
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
23454
|
+
*
|
|
23455
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23456
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23457
|
+
*/
|
|
23458
|
+
durability: "restored",
|
|
23459
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23460
|
+
* whether persisting is worth a SQLite commit. */
|
|
23461
|
+
volatileStateFields: ["lastChangedAt"]
|
|
23049
23462
|
};
|
|
23050
23463
|
/**
|
|
23051
23464
|
* Combustible-gas (LPG / methane / hydrogen) alarm sensor. Drives
|
|
@@ -23068,7 +23481,17 @@ var gasCapability = {
|
|
|
23068
23481
|
schema: GasStatusSchema,
|
|
23069
23482
|
kind: "push"
|
|
23070
23483
|
},
|
|
23071
|
-
runtimeState: GasStatusSchema
|
|
23484
|
+
runtimeState: GasStatusSchema,
|
|
23485
|
+
/**
|
|
23486
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
23487
|
+
*
|
|
23488
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23489
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23490
|
+
*/
|
|
23491
|
+
durability: "restored",
|
|
23492
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23493
|
+
* whether persisting is worth a SQLite commit. */
|
|
23494
|
+
volatileStateFields: ["lastChangedAt"]
|
|
23072
23495
|
};
|
|
23073
23496
|
/**
|
|
23074
23497
|
* Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
|
|
@@ -23144,7 +23567,14 @@ var humidifierCapability = {
|
|
|
23144
23567
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
23145
23568
|
* slice for live humidity / mode changes.
|
|
23146
23569
|
*/
|
|
23147
|
-
runtimeState: HumidifierStatusSchema
|
|
23570
|
+
runtimeState: HumidifierStatusSchema,
|
|
23571
|
+
/**
|
|
23572
|
+
* Runtime-state durability: **session** — as `climate-control`.
|
|
23573
|
+
*
|
|
23574
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23575
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23576
|
+
*/
|
|
23577
|
+
durability: "session"
|
|
23148
23578
|
};
|
|
23149
23579
|
/**
|
|
23150
23580
|
* Single-metric humidity reading. Drives Home Assistant `sensor`
|
|
@@ -23180,7 +23610,17 @@ var humiditySensorCapability = {
|
|
|
23180
23610
|
schema: HumiditySensorStatusSchema,
|
|
23181
23611
|
kind: "push"
|
|
23182
23612
|
},
|
|
23183
|
-
runtimeState: HumiditySensorStatusSchema
|
|
23613
|
+
runtimeState: HumiditySensorStatusSchema,
|
|
23614
|
+
/**
|
|
23615
|
+
* Runtime-state durability: **restored** — as `numeric-sensor` (67 of 75 writes were the clock alone).
|
|
23616
|
+
*
|
|
23617
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23618
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23619
|
+
*/
|
|
23620
|
+
durability: "restored",
|
|
23621
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23622
|
+
* whether persisting is worth a SQLite commit. */
|
|
23623
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
23184
23624
|
};
|
|
23185
23625
|
/**
|
|
23186
23626
|
* Image display cap. Models a single still image exposed by an integration —
|
|
@@ -23218,7 +23658,14 @@ var imageCapability = {
|
|
|
23218
23658
|
* Runtime-state slice — mirrored by the kernel. The UI reads `url`
|
|
23219
23659
|
* directly and renders the still image.
|
|
23220
23660
|
*/
|
|
23221
|
-
runtimeState: ImageStatusSchema
|
|
23661
|
+
runtimeState: ImageStatusSchema,
|
|
23662
|
+
/**
|
|
23663
|
+
* Runtime-state durability: **session** — a snapshot URL is a session-scoped handle; a restored one points at nothing.
|
|
23664
|
+
*
|
|
23665
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23666
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23667
|
+
*/
|
|
23668
|
+
durability: "session"
|
|
23222
23669
|
};
|
|
23223
23670
|
/**
|
|
23224
23671
|
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
@@ -23367,7 +23814,17 @@ var imageSettingsCapability = {
|
|
|
23367
23814
|
schema: ImageSettingsStatusSchema,
|
|
23368
23815
|
kind: "poll"
|
|
23369
23816
|
},
|
|
23370
|
-
runtimeState: ImageSettingsStatusSchema
|
|
23817
|
+
runtimeState: ImageSettingsStatusSchema,
|
|
23818
|
+
/**
|
|
23819
|
+
* Runtime-state durability: **restored** — operator-set camera imaging; mutation-driven.
|
|
23820
|
+
*
|
|
23821
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
23822
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
23823
|
+
*/
|
|
23824
|
+
durability: "restored",
|
|
23825
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
23826
|
+
* whether persisting is worth a SQLite commit. */
|
|
23827
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
23371
23828
|
};
|
|
23372
23829
|
/**
|
|
23373
23830
|
* integrations — system-scoped singleton capability for integration
|
|
@@ -23707,7 +24164,14 @@ var lawnMowerControlCapability = {
|
|
|
23707
24164
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
23708
24165
|
* slice for live activity + battery changes.
|
|
23709
24166
|
*/
|
|
23710
|
-
runtimeState: LawnMowerControlStatusSchema
|
|
24167
|
+
runtimeState: LawnMowerControlStatusSchema,
|
|
24168
|
+
/**
|
|
24169
|
+
* Runtime-state durability: **session** — as `vacuum-control`.
|
|
24170
|
+
*
|
|
24171
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24172
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24173
|
+
*/
|
|
24174
|
+
durability: "session"
|
|
23711
24175
|
};
|
|
23712
24176
|
/**
|
|
23713
24177
|
* local-network — hub-only singleton.
|
|
@@ -23913,7 +24377,17 @@ var lockControlCapability = {
|
|
|
23913
24377
|
* read `state` and disable themselves during `locking`/`unlocking`
|
|
23914
24378
|
* transitions.
|
|
23915
24379
|
*/
|
|
23916
|
-
runtimeState: LockControlStatusSchema
|
|
24380
|
+
runtimeState: LockControlStatusSchema,
|
|
24381
|
+
/**
|
|
24382
|
+
* Runtime-state durability: **restored** — a lock left locked must still read locked.
|
|
24383
|
+
*
|
|
24384
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24385
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24386
|
+
*/
|
|
24387
|
+
durability: "restored",
|
|
24388
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
24389
|
+
* whether persisting is worth a SQLite commit. */
|
|
24390
|
+
volatileStateFields: ["lastChangedAt"]
|
|
23917
24391
|
};
|
|
23918
24392
|
/**
|
|
23919
24393
|
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
@@ -24075,7 +24549,14 @@ var mediaPlayerCapability = {
|
|
|
24075
24549
|
* full slice for live now-playing, volume, and progress updates
|
|
24076
24550
|
* without polling.
|
|
24077
24551
|
*/
|
|
24078
|
-
runtimeState: MediaPlayerStatusSchema
|
|
24552
|
+
runtimeState: MediaPlayerStatusSchema,
|
|
24553
|
+
/**
|
|
24554
|
+
* Runtime-state durability: **session** — a restored transport position describes a playback that stopped when the hub did.
|
|
24555
|
+
*
|
|
24556
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24557
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24558
|
+
*/
|
|
24559
|
+
durability: "session"
|
|
24079
24560
|
};
|
|
24080
24561
|
/**
|
|
24081
24562
|
* mesh-network — collection cap for mesh-VPN providers.
|
|
@@ -24339,7 +24820,14 @@ onMotionChanged: { data: MotionOnMotionChangedDataSchema } },
|
|
|
24339
24820
|
* `device.state.motion.value`. Reads never invoke the provider, so
|
|
24340
24821
|
* UIs and other addons can poll the cached state safely.
|
|
24341
24822
|
*/
|
|
24342
|
-
runtimeState: MotionStatusSchema
|
|
24823
|
+
runtimeState: MotionStatusSchema,
|
|
24824
|
+
/**
|
|
24825
|
+
* 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.
|
|
24826
|
+
*
|
|
24827
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24828
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24829
|
+
*/
|
|
24830
|
+
durability: "session"
|
|
24343
24831
|
};
|
|
24344
24832
|
/**
|
|
24345
24833
|
* Motion-trigger toggle for accessory devices.
|
|
@@ -24404,7 +24892,14 @@ var motionTriggerCapability = {
|
|
|
24404
24892
|
schema: MotionTriggerStatusSchema,
|
|
24405
24893
|
kind: "command-driven"
|
|
24406
24894
|
},
|
|
24407
|
-
runtimeState: MotionTriggerRuntimeStateSchema
|
|
24895
|
+
runtimeState: MotionTriggerRuntimeStateSchema,
|
|
24896
|
+
/**
|
|
24897
|
+
* 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.
|
|
24898
|
+
*
|
|
24899
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24900
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24901
|
+
*/
|
|
24902
|
+
durability: "session"
|
|
24408
24903
|
};
|
|
24409
24904
|
/**
|
|
24410
24905
|
* Motion-zones share the same MaskShape vocabulary as privacy-mask — the
|
|
@@ -24471,7 +24966,17 @@ var motionZonesCapability = {
|
|
|
24471
24966
|
schema: MotionZoneStatusSchema,
|
|
24472
24967
|
kind: "poll"
|
|
24473
24968
|
},
|
|
24474
|
-
runtimeState: MotionZoneStatusSchema
|
|
24969
|
+
runtimeState: MotionZoneStatusSchema,
|
|
24970
|
+
/**
|
|
24971
|
+
* 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.
|
|
24972
|
+
*
|
|
24973
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
24974
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
24975
|
+
*/
|
|
24976
|
+
durability: "restored",
|
|
24977
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
24978
|
+
* whether persisting is worth a SQLite commit. */
|
|
24979
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
24475
24980
|
};
|
|
24476
24981
|
/**
|
|
24477
24982
|
* On-camera AI object detection cap. Surfaces per-device the classes
|
|
@@ -24545,7 +25050,17 @@ var nativeObjectDetectionCapability = {
|
|
|
24545
25050
|
schema: NativeObjectDetectionStatusSchema,
|
|
24546
25051
|
kind: "push"
|
|
24547
25052
|
},
|
|
24548
|
-
runtimeState: NativeObjectDetectionRuntimeStateSchema
|
|
25053
|
+
runtimeState: NativeObjectDetectionRuntimeStateSchema,
|
|
25054
|
+
/**
|
|
25055
|
+
* 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.
|
|
25056
|
+
*
|
|
25057
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25058
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25059
|
+
*/
|
|
25060
|
+
durability: "restored",
|
|
25061
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
25062
|
+
* whether persisting is worth a SQLite commit. */
|
|
25063
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
24549
25064
|
};
|
|
24550
25065
|
/**
|
|
24551
25066
|
* network-quality — system-scoped singleton capability tracking RTT,
|
|
@@ -24879,7 +25394,14 @@ onSent: { data: object({
|
|
|
24879
25394
|
* form reads `supports` to gate optional fields; history pane reads
|
|
24880
25395
|
* `lastSentAt` / `lastError` / `queueDepth`.
|
|
24881
25396
|
*/
|
|
24882
|
-
runtimeState: NotifierStatusSchema
|
|
25397
|
+
runtimeState: NotifierStatusSchema,
|
|
25398
|
+
/**
|
|
25399
|
+
* Runtime-state durability: **session** — live queue depth and last-send state; a restored queue depth describes a queue that no longer exists.
|
|
25400
|
+
*
|
|
25401
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25402
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25403
|
+
*/
|
|
25404
|
+
durability: "session"
|
|
24883
25405
|
};
|
|
24884
25406
|
/**
|
|
24885
25407
|
* Generic numeric sensor — last-resort fallback when no typed numeric
|
|
@@ -24922,7 +25444,17 @@ var numericSensorCapability = {
|
|
|
24922
25444
|
schema: NumericSensorStatusSchema,
|
|
24923
25445
|
kind: "push"
|
|
24924
25446
|
},
|
|
24925
|
-
runtimeState: NumericSensorStatusSchema
|
|
25447
|
+
runtimeState: NumericSensorStatusSchema,
|
|
25448
|
+
/**
|
|
25449
|
+
* 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.
|
|
25450
|
+
*
|
|
25451
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25452
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25453
|
+
*/
|
|
25454
|
+
durability: "restored",
|
|
25455
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
25456
|
+
* whether persisting is worth a SQLite commit. */
|
|
25457
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
24926
25458
|
};
|
|
24927
25459
|
/**
|
|
24928
25460
|
* Generic on-screen-display (video overlay) cap. Each camera exposes
|
|
@@ -25307,7 +25839,14 @@ var petFeederCapability = {
|
|
|
25307
25839
|
* the full slice via `device.state.petFeeder.value` and refresh on
|
|
25308
25840
|
* every poll without re-querying the provider.
|
|
25309
25841
|
*/
|
|
25310
|
-
runtimeState: PetFeederStatusSchema
|
|
25842
|
+
runtimeState: PetFeederStatusSchema,
|
|
25843
|
+
/**
|
|
25844
|
+
* Runtime-state durability: **session** — live appliance state re-published on connect.
|
|
25845
|
+
*
|
|
25846
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
25847
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
25848
|
+
*/
|
|
25849
|
+
durability: "session"
|
|
25311
25850
|
};
|
|
25312
25851
|
var VehicleSchema = object({
|
|
25313
25852
|
id: string(),
|
|
@@ -25653,7 +26192,17 @@ var powerMeterCapability = {
|
|
|
25653
26192
|
schema: PowerMeterStatusSchema,
|
|
25654
26193
|
kind: "push"
|
|
25655
26194
|
},
|
|
25656
|
-
runtimeState: PowerMeterStatusSchema
|
|
26195
|
+
runtimeState: PowerMeterStatusSchema,
|
|
26196
|
+
/**
|
|
26197
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `kwhTotal` is an accumulator whose restored value is the baseline.
|
|
26198
|
+
*
|
|
26199
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26200
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26201
|
+
*/
|
|
26202
|
+
durability: "restored",
|
|
26203
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26204
|
+
* whether persisting is worth a SQLite commit. */
|
|
26205
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
25657
26206
|
};
|
|
25658
26207
|
/**
|
|
25659
26208
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
@@ -25710,7 +26259,17 @@ var presenceCapability = {
|
|
|
25710
26259
|
* the map pin is rendered (use `DeviceFeature.PresenceGps` for the
|
|
25711
26260
|
* pre-fetch fast-path check).
|
|
25712
26261
|
*/
|
|
25713
|
-
runtimeState: PresenceStatusSchema
|
|
26262
|
+
runtimeState: PresenceStatusSchema,
|
|
26263
|
+
/**
|
|
26264
|
+
* Runtime-state durability: **restored** — occupancy-relevant: the restored state is what an occupancy rule compares the first post-restart observation against.
|
|
26265
|
+
*
|
|
26266
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26267
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26268
|
+
*/
|
|
26269
|
+
durability: "restored",
|
|
26270
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26271
|
+
* whether persisting is worth a SQLite commit. */
|
|
26272
|
+
volatileStateFields: ["lastChangedAt"]
|
|
25714
26273
|
};
|
|
25715
26274
|
/**
|
|
25716
26275
|
* Atmospheric pressure reading in hectopascals. Drives Home Assistant
|
|
@@ -25746,7 +26305,17 @@ var pressureSensorCapability = {
|
|
|
25746
26305
|
schema: PressureSensorStatusSchema,
|
|
25747
26306
|
kind: "push"
|
|
25748
26307
|
},
|
|
25749
|
-
runtimeState: PressureSensorStatusSchema
|
|
26308
|
+
runtimeState: PressureSensorStatusSchema,
|
|
26309
|
+
/**
|
|
26310
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`.
|
|
26311
|
+
*
|
|
26312
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26313
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26314
|
+
*/
|
|
26315
|
+
durability: "restored",
|
|
26316
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26317
|
+
* whether persisting is worth a SQLite commit. */
|
|
26318
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
25750
26319
|
};
|
|
25751
26320
|
/**
|
|
25752
26321
|
* PRIVACY — what the camera deliberately does not capture. Two planes:
|
|
@@ -25876,7 +26445,17 @@ var privacyMaskCapability = {
|
|
|
25876
26445
|
schema: PrivacyMaskStatusSchema,
|
|
25877
26446
|
kind: "poll"
|
|
25878
26447
|
},
|
|
25879
|
-
runtimeState: PrivacyMaskStatusSchema
|
|
26448
|
+
runtimeState: PrivacyMaskStatusSchema,
|
|
26449
|
+
/**
|
|
26450
|
+
* Runtime-state durability: **restored** — operator-drawn regions, zero real churn — 22 writes in 25 minutes, every one of them the clock.
|
|
26451
|
+
*
|
|
26452
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26453
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26454
|
+
*/
|
|
26455
|
+
durability: "restored",
|
|
26456
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
26457
|
+
* whether persisting is worth a SQLite commit. */
|
|
26458
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
25880
26459
|
};
|
|
25881
26460
|
var PtzPresetSchema = object({
|
|
25882
26461
|
id: string(),
|
|
@@ -26042,7 +26621,14 @@ var ptzAutotrackCapability = {
|
|
|
26042
26621
|
* fetch / cache / fallback logic out of the four cap methods —
|
|
26043
26622
|
* they become trampolines over `runtimeState`.
|
|
26044
26623
|
*/
|
|
26045
|
-
runtimeState: PtzAutotrackRuntimeStateSchema
|
|
26624
|
+
runtimeState: PtzAutotrackRuntimeStateSchema,
|
|
26625
|
+
/**
|
|
26626
|
+
* Runtime-state durability: **session** — mirrors the camera's own autotrack config, re-read on connect.
|
|
26627
|
+
*
|
|
26628
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
26629
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
26630
|
+
*/
|
|
26631
|
+
durability: "session"
|
|
26046
26632
|
};
|
|
26047
26633
|
DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
|
|
26048
26634
|
kind: "mutation",
|
|
@@ -26711,7 +27297,14 @@ var sceneMonitorCapability = {
|
|
|
26711
27297
|
schema: SceneMonitorStatusSchema,
|
|
26712
27298
|
kind: "push"
|
|
26713
27299
|
},
|
|
26714
|
-
runtimeState: SceneMonitorStatusSchema
|
|
27300
|
+
runtimeState: SceneMonitorStatusSchema,
|
|
27301
|
+
/**
|
|
27302
|
+
* Runtime-state durability: **session** — re-derived from the current scene on the next evaluation.
|
|
27303
|
+
*
|
|
27304
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27305
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27306
|
+
*/
|
|
27307
|
+
durability: "session"
|
|
26715
27308
|
};
|
|
26716
27309
|
/**
|
|
26717
27310
|
* Per-stage gating mode applied to the zones a rule references.
|
|
@@ -26855,7 +27448,14 @@ var scriptRunnerCapability = {
|
|
|
26855
27448
|
* `isRunning` to render a spinner during execution and surfaces
|
|
26856
27449
|
* `lastError` / `lastRunSuccess` in the recent-runs panel.
|
|
26857
27450
|
*/
|
|
26858
|
-
runtimeState: ScriptRunnerStatusSchema
|
|
27451
|
+
runtimeState: ScriptRunnerStatusSchema,
|
|
27452
|
+
/**
|
|
27453
|
+
* Runtime-state durability: **session** — a restored `isRunning: true` describes a process that died with the previous hub.
|
|
27454
|
+
*
|
|
27455
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27456
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27457
|
+
*/
|
|
27458
|
+
durability: "session"
|
|
26859
27459
|
};
|
|
26860
27460
|
/**
|
|
26861
27461
|
* Smoke alarm sensor — boolean "is smoke currently detected" with
|
|
@@ -26882,7 +27482,17 @@ var smokeCapability = {
|
|
|
26882
27482
|
schema: SmokeStatusSchema,
|
|
26883
27483
|
kind: "push"
|
|
26884
27484
|
},
|
|
26885
|
-
runtimeState: SmokeStatusSchema
|
|
27485
|
+
runtimeState: SmokeStatusSchema,
|
|
27486
|
+
/**
|
|
27487
|
+
* Runtime-state durability: **restored** — a safety sensor must not read "clear" merely because the hub restarted.
|
|
27488
|
+
*
|
|
27489
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27490
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27491
|
+
*/
|
|
27492
|
+
durability: "restored",
|
|
27493
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27494
|
+
* whether persisting is worth a SQLite commit. */
|
|
27495
|
+
volatileStateFields: ["lastChangedAt"]
|
|
26886
27496
|
};
|
|
26887
27497
|
/**
|
|
26888
27498
|
* One publishable camera stream as its OWNING PROVIDER describes it — the same
|
|
@@ -27055,7 +27665,17 @@ var streamParamsCapability = {
|
|
|
27055
27665
|
schema: StreamParamsStatusSchema,
|
|
27056
27666
|
kind: "poll"
|
|
27057
27667
|
},
|
|
27058
|
-
runtimeState: StreamParamsStatusSchema
|
|
27668
|
+
runtimeState: StreamParamsStatusSchema,
|
|
27669
|
+
/**
|
|
27670
|
+
* Runtime-state durability: **restored** — operator-set encoder profile; mutation-driven.
|
|
27671
|
+
*
|
|
27672
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27673
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27674
|
+
*/
|
|
27675
|
+
durability: "restored",
|
|
27676
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27677
|
+
* whether persisting is worth a SQLite commit. */
|
|
27678
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
27059
27679
|
};
|
|
27060
27680
|
/**
|
|
27061
27681
|
* Generic on/off switch cap for accessory children (siren, floodlight,
|
|
@@ -27101,6 +27721,16 @@ var switchCapability = {
|
|
|
27101
27721
|
* not need to re-query the provider after a setState mutation.
|
|
27102
27722
|
*/
|
|
27103
27723
|
runtimeState: SwitchStatusSchema,
|
|
27724
|
+
/**
|
|
27725
|
+
* Runtime-state durability: **restored** — device state an operator reads as authoritative; 55 devices, transition-driven.
|
|
27726
|
+
*
|
|
27727
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27728
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27729
|
+
*/
|
|
27730
|
+
durability: "restored",
|
|
27731
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27732
|
+
* whether persisting is worth a SQLite commit. */
|
|
27733
|
+
volatileStateFields: ["lastChangedAt"],
|
|
27104
27734
|
settings: { bindings: [{
|
|
27105
27735
|
kind: "scalar",
|
|
27106
27736
|
statusPath: "on",
|
|
@@ -27180,7 +27810,17 @@ var tamperCapability = {
|
|
|
27180
27810
|
schema: TamperStatusSchema,
|
|
27181
27811
|
kind: "push"
|
|
27182
27812
|
},
|
|
27183
|
-
runtimeState: TamperStatusSchema
|
|
27813
|
+
runtimeState: TamperStatusSchema,
|
|
27814
|
+
/**
|
|
27815
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
27816
|
+
*
|
|
27817
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27818
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27819
|
+
*/
|
|
27820
|
+
durability: "restored",
|
|
27821
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27822
|
+
* whether persisting is worth a SQLite commit. */
|
|
27823
|
+
volatileStateFields: ["lastChangedAt"]
|
|
27184
27824
|
};
|
|
27185
27825
|
/**
|
|
27186
27826
|
* Single-metric temperature reading. Drives Home Assistant `sensor`
|
|
@@ -27225,7 +27865,17 @@ var temperatureSensorCapability = {
|
|
|
27225
27865
|
schema: TemperatureSensorStatusSchema,
|
|
27226
27866
|
kind: "push"
|
|
27227
27867
|
},
|
|
27228
|
-
runtimeState: TemperatureSensorStatusSchema
|
|
27868
|
+
runtimeState: TemperatureSensorStatusSchema,
|
|
27869
|
+
/**
|
|
27870
|
+
* Runtime-state durability: **restored** — as `numeric-sensor` (69 of 125 writes were the clock alone).
|
|
27871
|
+
*
|
|
27872
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27873
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27874
|
+
*/
|
|
27875
|
+
durability: "restored",
|
|
27876
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
27877
|
+
* whether persisting is worth a SQLite commit. */
|
|
27878
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
27229
27879
|
};
|
|
27230
27880
|
/**
|
|
27231
27881
|
* toast — system-scoped singleton capability that streams toast
|
|
@@ -27294,7 +27944,14 @@ var updateCapability = {
|
|
|
27294
27944
|
schema: UpdateStatusSchema,
|
|
27295
27945
|
kind: "poll"
|
|
27296
27946
|
},
|
|
27297
|
-
runtimeState: UpdateStatusSchema
|
|
27947
|
+
runtimeState: UpdateStatusSchema,
|
|
27948
|
+
/**
|
|
27949
|
+
* Runtime-state durability: **session** — a restored `inProgress: true` describes an update that is no longer running; versions are re-probed at boot.
|
|
27950
|
+
*
|
|
27951
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
27952
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
27953
|
+
*/
|
|
27954
|
+
durability: "session"
|
|
27298
27955
|
};
|
|
27299
27956
|
var UserSummarySchema = object({
|
|
27300
27957
|
id: string(),
|
|
@@ -27628,7 +28285,14 @@ var vacuumControlCapability = {
|
|
|
27628
28285
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
27629
28286
|
* slice for live state + battery + fan-speed changes.
|
|
27630
28287
|
*/
|
|
27631
|
-
runtimeState: VacuumControlStatusSchema
|
|
28288
|
+
runtimeState: VacuumControlStatusSchema,
|
|
28289
|
+
/**
|
|
28290
|
+
* Runtime-state durability: **session** — as `media-player` — a restored `state: cleaning` is a robot that is not cleaning.
|
|
28291
|
+
*
|
|
28292
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28293
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28294
|
+
*/
|
|
28295
|
+
durability: "session"
|
|
27632
28296
|
};
|
|
27633
28297
|
var ValveStatusSchema = object({
|
|
27634
28298
|
/** Lifecycle state of the valve. */
|
|
@@ -27680,7 +28344,14 @@ var valveCapability = {
|
|
|
27680
28344
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
27681
28345
|
* slice for live position changes during a move.
|
|
27682
28346
|
*/
|
|
27683
|
-
runtimeState: ValveStatusSchema
|
|
28347
|
+
runtimeState: ValveStatusSchema,
|
|
28348
|
+
/**
|
|
28349
|
+
* Runtime-state durability: **session** — as `brightness`.
|
|
28350
|
+
*
|
|
28351
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28352
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28353
|
+
*/
|
|
28354
|
+
durability: "session"
|
|
27684
28355
|
};
|
|
27685
28356
|
/**
|
|
27686
28357
|
* Vibration / shake / impact sensor. Drives Home Assistant
|
|
@@ -27702,7 +28373,17 @@ var vibrationCapability = {
|
|
|
27702
28373
|
schema: VibrationStatusSchema,
|
|
27703
28374
|
kind: "push"
|
|
27704
28375
|
},
|
|
27705
|
-
runtimeState: VibrationStatusSchema
|
|
28376
|
+
runtimeState: VibrationStatusSchema,
|
|
28377
|
+
/**
|
|
28378
|
+
* Runtime-state durability: **restored** — as `smoke`.
|
|
28379
|
+
*
|
|
28380
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28381
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28382
|
+
*/
|
|
28383
|
+
durability: "restored",
|
|
28384
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
28385
|
+
* whether persisting is worth a SQLite commit. */
|
|
28386
|
+
volatileStateFields: ["lastChangedAt"]
|
|
27706
28387
|
};
|
|
27707
28388
|
/**
|
|
27708
28389
|
* Water heater / boiler cap. Models HA `water_heater.*` entities — a
|
|
@@ -27776,7 +28457,14 @@ var waterHeaterCapability = {
|
|
|
27776
28457
|
* Runtime-state slice — mirrored by the kernel. UI controls watch the
|
|
27777
28458
|
* slice for live temperature / mode / away changes.
|
|
27778
28459
|
*/
|
|
27779
|
-
runtimeState: WaterHeaterStatusSchema
|
|
28460
|
+
runtimeState: WaterHeaterStatusSchema,
|
|
28461
|
+
/**
|
|
28462
|
+
* Runtime-state durability: **session** — as `climate-control`.
|
|
28463
|
+
*
|
|
28464
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28465
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28466
|
+
*/
|
|
28467
|
+
durability: "session"
|
|
27780
28468
|
};
|
|
27781
28469
|
/**
|
|
27782
28470
|
* Weather provider cap. Models HA `weather.*` entities — a read-only
|
|
@@ -27835,7 +28523,14 @@ var weatherCapability = {
|
|
|
27835
28523
|
* Runtime-state slice — mirrored by the kernel. The UI reads the
|
|
27836
28524
|
* current conditions directly from the slice on each weather push.
|
|
27837
28525
|
*/
|
|
27838
|
-
runtimeState: WeatherStatusSchema
|
|
28526
|
+
runtimeState: WeatherStatusSchema,
|
|
28527
|
+
/**
|
|
28528
|
+
* Runtime-state durability: **session** — a forecast is stale the moment the hub is down; the provider re-fetches on connect.
|
|
28529
|
+
*
|
|
28530
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28531
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28532
|
+
*/
|
|
28533
|
+
durability: "session"
|
|
27839
28534
|
};
|
|
27840
28535
|
/**
|
|
27841
28536
|
* Per-zone occupancy aggregation produced by the analytics frame
|
|
@@ -27997,7 +28692,14 @@ var zoneAnalyticsCapability = {
|
|
|
27997
28692
|
* automatically; the explicit `getCurrentSnapshot` cap method is
|
|
27998
28693
|
* still useful for one-off polls without a subscription.
|
|
27999
28694
|
*/
|
|
28000
|
-
runtimeState: CameraOccupancySnapshotSchema
|
|
28695
|
+
runtimeState: CameraOccupancySnapshotSchema,
|
|
28696
|
+
/**
|
|
28697
|
+
* Runtime-state durability: **session** — per-frame analytics; with `audio-metrics` it is ~90 % of the offered write rate. Re-derived on the next frame.
|
|
28698
|
+
*
|
|
28699
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28700
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28701
|
+
*/
|
|
28702
|
+
durability: "session"
|
|
28001
28703
|
};
|
|
28002
28704
|
/**
|
|
28003
28705
|
* Stages a {@link ZoneRule} can apply to. Discriminator on the rules
|
|
@@ -28075,7 +28777,14 @@ var zoneRulesCapability = {
|
|
|
28075
28777
|
motion: array(ZoneRuleSchema).readonly(),
|
|
28076
28778
|
detection: array(ZoneRuleSchema).readonly(),
|
|
28077
28779
|
package: array(ZoneRuleSchema).readonly()
|
|
28078
|
-
})
|
|
28780
|
+
}),
|
|
28781
|
+
/**
|
|
28782
|
+
* Runtime-state durability: **restored** — operator intent, mutation-only, same argument as `zones`.
|
|
28783
|
+
*
|
|
28784
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
28785
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
28786
|
+
*/
|
|
28787
|
+
durability: "restored"
|
|
28079
28788
|
};
|
|
28080
28789
|
/**
|
|
28081
28790
|
* Most specific first. Extending this list is how a new device kind becomes
|
|
@@ -34815,6 +35524,7 @@ Object.freeze({
|
|
|
34815
35524
|
"network-access": "ingress",
|
|
34816
35525
|
"smtp-provider": "email"
|
|
34817
35526
|
});
|
|
35527
|
+
new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
|
|
34818
35528
|
new Set(["devices", "classes"]);
|
|
34819
35529
|
var WEEKDAY_TO_DAY = {
|
|
34820
35530
|
Sun: 0,
|
|
@@ -35382,6 +36092,12 @@ Object.defineProperty(exports, "DEFAULT_TIMELAPSE_PREVIEW_TEXT", {
|
|
|
35382
36092
|
return DEFAULT_TIMELAPSE_PREVIEW_TEXT;
|
|
35383
36093
|
}
|
|
35384
36094
|
});
|
|
36095
|
+
Object.defineProperty(exports, "DETECTION_MACRO_CLASSES", {
|
|
36096
|
+
enumerable: true,
|
|
36097
|
+
get: function() {
|
|
36098
|
+
return DETECTION_MACRO_CLASSES;
|
|
36099
|
+
}
|
|
36100
|
+
});
|
|
35385
36101
|
Object.defineProperty(exports, "DETECTION_PIPELINE_CAP_NAME", {
|
|
35386
36102
|
enumerable: true,
|
|
35387
36103
|
get: function() {
|
|
@@ -35430,12 +36146,30 @@ Object.defineProperty(exports, "MACRO_LABELS", {
|
|
|
35430
36146
|
return MACRO_LABELS;
|
|
35431
36147
|
}
|
|
35432
36148
|
});
|
|
36149
|
+
Object.defineProperty(exports, "NC_ALARM_SYSTEM_EVENT_KINDS", {
|
|
36150
|
+
enumerable: true,
|
|
36151
|
+
get: function() {
|
|
36152
|
+
return NC_ALARM_SYSTEM_EVENT_KINDS;
|
|
36153
|
+
}
|
|
36154
|
+
});
|
|
35433
36155
|
Object.defineProperty(exports, "NC_CONDITION_CATALOG", {
|
|
35434
36156
|
enumerable: true,
|
|
35435
36157
|
get: function() {
|
|
35436
36158
|
return NC_CONDITION_CATALOG;
|
|
35437
36159
|
}
|
|
35438
36160
|
});
|
|
36161
|
+
Object.defineProperty(exports, "NC_DEFAULT_SNOOZE_MINUTES", {
|
|
36162
|
+
enumerable: true,
|
|
36163
|
+
get: function() {
|
|
36164
|
+
return NC_DEFAULT_SNOOZE_MINUTES;
|
|
36165
|
+
}
|
|
36166
|
+
});
|
|
36167
|
+
Object.defineProperty(exports, "NC_SNOOZE_MAX_MINUTES", {
|
|
36168
|
+
enumerable: true,
|
|
36169
|
+
get: function() {
|
|
36170
|
+
return NC_SNOOZE_MAX_MINUTES;
|
|
36171
|
+
}
|
|
36172
|
+
});
|
|
35439
36173
|
Object.defineProperty(exports, "NC_TAXONOMY", {
|
|
35440
36174
|
enumerable: true,
|
|
35441
36175
|
get: function() {
|
|
@@ -35682,6 +36416,12 @@ Object.defineProperty(exports, "hydrateSchema", {
|
|
|
35682
36416
|
return hydrateSchema;
|
|
35683
36417
|
}
|
|
35684
36418
|
});
|
|
36419
|
+
Object.defineProperty(exports, "isDetectionMacroClass", {
|
|
36420
|
+
enumerable: true,
|
|
36421
|
+
get: function() {
|
|
36422
|
+
return isDetectionMacroClass;
|
|
36423
|
+
}
|
|
36424
|
+
});
|
|
35685
36425
|
Object.defineProperty(exports, "isDeviceScopedCap", {
|
|
35686
36426
|
enumerable: true,
|
|
35687
36427
|
get: function() {
|