@camstack/types 1.2.421 → 1.2.423

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.
Files changed (40) hide show
  1. package/dist/addon.js +1 -1
  2. package/dist/addon.mjs +1 -1
  3. package/dist/capabilities/composer.cap.d.ts +129 -57
  4. package/dist/capabilities/core-blocks.cap.d.ts +936 -410
  5. package/dist/capabilities/index.d.ts +3 -1
  6. package/dist/capabilities/meter.cap.d.ts +53 -0
  7. package/dist/capabilities/notification-rules.cap.d.ts +12 -0
  8. package/dist/client.js +17 -1
  9. package/dist/client.mjs +17 -1
  10. package/dist/composition/composition-report.d.ts +45 -0
  11. package/dist/composition/composition.d.ts +196 -19
  12. package/dist/composition/helpers/compile-history.d.ts +13 -0
  13. package/dist/composition/helpers/compile.d.ts +2 -1
  14. package/dist/composition/helpers/energy.d.ts +8 -0
  15. package/dist/composition/helpers/history-math.d.ts +39 -0
  16. package/dist/composition/helpers/history-window.d.ts +71 -0
  17. package/dist/composition/helpers/index.d.ts +6 -2
  18. package/dist/composition/helpers/source-pick.d.ts +2 -0
  19. package/dist/composition/helpers/spec.d.ts +23 -10
  20. package/dist/{composition-B3Hkb6v7.js → composition-CPRAP41h.js} +792 -8
  21. package/dist/{composition-B2rw5L29.mjs → composition-CpETZ4HL.mjs} +595 -9
  22. package/dist/device/cap-vocabulary/entries/sensors.d.ts +1 -1
  23. package/dist/generated/addon-api.d.ts +14 -0
  24. package/dist/generated/addon-cap-facts.d.ts +1 -1
  25. package/dist/generated/cap-status-types.d.ts +3 -1
  26. package/dist/generated/capability-router-map.d.ts +5 -2
  27. package/dist/generated/device-local-state.d.ts +3 -0
  28. package/dist/generated/device-proxy.d.ts +3 -0
  29. package/dist/generated/device-scoped-caps.d.ts +1 -1
  30. package/dist/generated/history-catalog.d.ts +1 -1
  31. package/dist/generated/method-access-map.d.ts +1 -1
  32. package/dist/generated/method-device-selectors.d.ts +1 -1
  33. package/dist/generated/runtime-state-durability.d.ts +1 -1
  34. package/dist/index.js +761 -447
  35. package/dist/index.mjs +723 -448
  36. package/dist/node.js +1 -1
  37. package/dist/node.mjs +1 -1
  38. package/dist/{sleep-bykKrTgu.mjs → sleep-0sD_LHLI.mjs} +10 -1
  39. package/dist/{sleep-YJ6FVsUu.js → sleep-CEKGW7A5.js} +10 -1
  40. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-YJ6FVsUu.js");
2
+ const require_sleep = require("./sleep-CEKGW7A5.js");
3
3
  const require_event_category = require("./event-category-Ave2VSxY.js");
4
- const require_composition = require("./composition-B3Hkb6v7.js");
4
+ const require_composition = require("./composition-CPRAP41h.js");
5
5
  const require_node_color = require("./node-color.js");
6
6
  const require_err_msg = require("./err-msg-U7lLUMNz.js");
7
7
  const require_enums = require("./enums.js");
@@ -12627,7 +12627,8 @@ var CompositionProblemCodeSchema = zod.z.enum([
12627
12627
  "native-capability-replace",
12628
12628
  "mixed-quantity",
12629
12629
  "helper-mismatch",
12630
- "member-constraint"
12630
+ "member-constraint",
12631
+ "retention"
12631
12632
  ]);
12632
12633
  /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
12633
12634
  var CompositionProblemSchema = zod.z.object({
@@ -13023,6 +13024,20 @@ function inferExpressionKinds(input) {
13023
13024
  * planner (`composition-items.ts`). Internal to the composition module — NOT
13024
13025
  * in the barrel: these are planner internals, not a published contract.
13025
13026
  */
13027
+ function seriesKinds(source) {
13028
+ if (source.publish !== "value") return {
13029
+ ok: true,
13030
+ kinds: new Set(["number"])
13031
+ };
13032
+ if (source.empty === "null") return {
13033
+ ok: true,
13034
+ kinds: new Set(["number", "null"])
13035
+ };
13036
+ return {
13037
+ ok: true,
13038
+ kinds: new Set(["number"])
13039
+ };
13040
+ }
13026
13041
  function aggregateKinds(source) {
13027
13042
  if (source.publish !== "value") return {
13028
13043
  ok: true,
@@ -13069,6 +13084,7 @@ function sourceKinds(source, lookupCap) {
13069
13084
  message: "code fields arrive in slice 4"
13070
13085
  };
13071
13086
  if (source.kind === "aggregate") return aggregateKinds(source);
13087
+ if (source.kind === "series") return seriesKinds(source);
13072
13088
  const bindingKinds = /* @__PURE__ */ new Map();
13073
13089
  for (const [name, binding] of Object.entries(source.bindings)) {
13074
13090
  if (binding.kind === "literal") {
@@ -13270,7 +13286,7 @@ function planItems(def, feature, featureIndex, lookupCap, mode = "new") {
13270
13286
  * One catalog row per base reading a group helper can build (D944 §3).
13271
13287
  * Data, not a form default written into the block.
13272
13288
  */
13273
- var NOW = {
13289
+ var NOW$1 = {
13274
13290
  fieldPath: "lastFetchedAt",
13275
13291
  expr: "now"
13276
13292
  };
@@ -13316,7 +13332,7 @@ var GROUP_TEMPLATES = [
13316
13332
  quantity: "temperature",
13317
13333
  defaultAggregate: "mean",
13318
13334
  empty: "null",
13319
- companions: [NOW]
13335
+ companions: [NOW$1]
13320
13336
  }),
13321
13337
  numeric({
13322
13338
  id: "humidity",
@@ -13327,7 +13343,7 @@ var GROUP_TEMPLATES = [
13327
13343
  quantity: "humidity",
13328
13344
  defaultAggregate: "mean",
13329
13345
  empty: "null",
13330
- companions: [NOW]
13346
+ companions: [NOW$1]
13331
13347
  }),
13332
13348
  numeric({
13333
13349
  id: "pressure",
@@ -13338,7 +13354,7 @@ var GROUP_TEMPLATES = [
13338
13354
  quantity: "pressure",
13339
13355
  defaultAggregate: "mean",
13340
13356
  empty: "null",
13341
- companions: [NOW]
13357
+ companions: [NOW$1]
13342
13358
  }),
13343
13359
  numeric({
13344
13360
  id: "illuminance",
@@ -13349,7 +13365,7 @@ var GROUP_TEMPLATES = [
13349
13365
  quantity: "illuminance",
13350
13366
  defaultAggregate: "mean",
13351
13367
  empty: "null",
13352
- companions: [NOW]
13368
+ companions: [NOW$1]
13353
13369
  }),
13354
13370
  numeric({
13355
13371
  id: "power",
@@ -13360,7 +13376,7 @@ var GROUP_TEMPLATES = [
13360
13376
  quantity: "power",
13361
13377
  defaultAggregate: "sum",
13362
13378
  empty: "omit",
13363
- companions: [NOW]
13379
+ companions: [NOW$1]
13364
13380
  }),
13365
13381
  numeric({
13366
13382
  id: "energy",
@@ -13371,7 +13387,7 @@ var GROUP_TEMPLATES = [
13371
13387
  quantity: "energy",
13372
13388
  defaultAggregate: "sum",
13373
13389
  empty: "omit",
13374
- companions: [NOW]
13390
+ companions: [NOW$1]
13375
13391
  }),
13376
13392
  numeric({
13377
13393
  id: "battery",
@@ -13406,7 +13422,7 @@ var GROUP_TEMPLATES = [
13406
13422
  quantity: "device",
13407
13423
  defaultAggregate: "mean",
13408
13424
  empty: "null",
13409
- companions: [NOW]
13425
+ companions: [NOW$1]
13410
13426
  }),
13411
13427
  binary({
13412
13428
  id: "motion",
@@ -13723,6 +13739,545 @@ async function runFanOut(calls, invoke) {
13723
13739
  return results;
13724
13740
  }
13725
13741
  //#endregion
13742
+ //#region src/generated/history-catalog.ts
13743
+ /**
13744
+ * Cap history catalog, projected from every `*.cap.ts` `history` block.
13745
+ * 42 caps with series (76 series), 32 caps answered `'none'`.
13746
+ * Field keys are `runtimeState` paths (`a.b` into fixed objects only).
13747
+ */
13748
+ var HISTORY_CATALOG = {
13749
+ "air-quality-sensor": {
13750
+ "co2Ppm": {
13751
+ kind: "gauge",
13752
+ unit: "ppm",
13753
+ deadband: 5
13754
+ },
13755
+ "vocPpb": {
13756
+ kind: "gauge",
13757
+ unit: "ppb",
13758
+ deadband: 5
13759
+ },
13760
+ "pm25": {
13761
+ kind: "gauge",
13762
+ unit: "µg/m³",
13763
+ deadband: 1
13764
+ },
13765
+ "pm10": {
13766
+ kind: "gauge",
13767
+ unit: "µg/m³",
13768
+ deadband: 1
13769
+ },
13770
+ "aqi": {
13771
+ kind: "gauge",
13772
+ unit: "count",
13773
+ deadband: 1
13774
+ }
13775
+ },
13776
+ "alarm-panel": { "state": {
13777
+ kind: "enum",
13778
+ values: [
13779
+ "disarmed",
13780
+ "armed_home",
13781
+ "armed_away",
13782
+ "armed_night",
13783
+ "armed_vacation",
13784
+ "armed_custom_bypass",
13785
+ "arming",
13786
+ "disarming",
13787
+ "pending",
13788
+ "triggered"
13789
+ ]
13790
+ } },
13791
+ "ambient-light-sensor": { "lux": {
13792
+ kind: "gauge",
13793
+ unit: "lx",
13794
+ deadbandPct: 10,
13795
+ minIntervalMs: 6e4
13796
+ } },
13797
+ "battery": {
13798
+ "percentage": {
13799
+ kind: "gauge",
13800
+ unit: "%"
13801
+ },
13802
+ "volts": {
13803
+ kind: "gauge",
13804
+ unit: "V"
13805
+ }
13806
+ },
13807
+ "binary": { "on": { kind: "boolean" } },
13808
+ "brightness": { "percentage": {
13809
+ kind: "gauge",
13810
+ unit: "%",
13811
+ minIntervalMs: 0
13812
+ } },
13813
+ "carbon-monoxide": { "detected": { kind: "boolean" } },
13814
+ "climate-control": {
13815
+ "currentTemp": {
13816
+ kind: "gauge",
13817
+ unit: "°C",
13818
+ deadband: .1
13819
+ },
13820
+ "currentHumidity": {
13821
+ kind: "gauge",
13822
+ unit: "%",
13823
+ deadband: .5
13824
+ },
13825
+ "target": {
13826
+ kind: "gauge",
13827
+ unit: "°C",
13828
+ minIntervalMs: 0
13829
+ },
13830
+ "targetHigh": {
13831
+ kind: "gauge",
13832
+ unit: "°C",
13833
+ minIntervalMs: 0
13834
+ },
13835
+ "targetLow": {
13836
+ kind: "gauge",
13837
+ unit: "°C",
13838
+ minIntervalMs: 0
13839
+ }
13840
+ },
13841
+ "connectivity": { "connected": { kind: "boolean" } },
13842
+ "contact": { "entryOpen": { kind: "boolean" } },
13843
+ "cover": { "position": {
13844
+ kind: "gauge",
13845
+ unit: "%",
13846
+ minIntervalMs: 0
13847
+ } },
13848
+ "device-status": { "online": { kind: "boolean" } },
13849
+ "dishwasher": {
13850
+ "progressPercent": {
13851
+ kind: "gauge",
13852
+ unit: "%",
13853
+ deadband: 2
13854
+ },
13855
+ "state": {
13856
+ kind: "enum",
13857
+ values: [
13858
+ "idle",
13859
+ "running",
13860
+ "paused",
13861
+ "finished",
13862
+ "error",
13863
+ "unavailable"
13864
+ ]
13865
+ },
13866
+ "operationState": {
13867
+ kind: "enum",
13868
+ values: [
13869
+ "Inactive",
13870
+ "Ready",
13871
+ "DelayedStart",
13872
+ "Run",
13873
+ "Pause",
13874
+ "ActionRequired",
13875
+ "Finished",
13876
+ "Error",
13877
+ "Aborting"
13878
+ ]
13879
+ },
13880
+ "remainingSeconds": {
13881
+ kind: "gauge",
13882
+ unit: "s",
13883
+ minIntervalMs: 6e4
13884
+ },
13885
+ "doorOpen": { kind: "boolean" },
13886
+ "powerOn": { kind: "boolean" }
13887
+ },
13888
+ "enum-sensor": { "value": {
13889
+ kind: "enum",
13890
+ skipWhenSet: "timestamp"
13891
+ } },
13892
+ "fan-control": {
13893
+ "percentage": {
13894
+ kind: "gauge",
13895
+ unit: "%",
13896
+ minIntervalMs: 0
13897
+ },
13898
+ "oscillating": { kind: "boolean" }
13899
+ },
13900
+ "flood": { "flooded": { kind: "boolean" } },
13901
+ "gas": { "detected": { kind: "boolean" } },
13902
+ "heating-valve": { "position": {
13903
+ kind: "gauge",
13904
+ unit: "%",
13905
+ deadband: 1
13906
+ } },
13907
+ "humidifier": {
13908
+ "currentHumidity": {
13909
+ kind: "gauge",
13910
+ unit: "%",
13911
+ deadband: .5
13912
+ },
13913
+ "on": { kind: "boolean" }
13914
+ },
13915
+ "humidity-sensor": { "percent": {
13916
+ kind: "gauge",
13917
+ unit: "%",
13918
+ deadband: .5
13919
+ } },
13920
+ "lawn-mower-control": { "batteryLevel": {
13921
+ kind: "gauge",
13922
+ unit: "%",
13923
+ deadband: 2
13924
+ } },
13925
+ "lock-control": { "state": {
13926
+ kind: "enum",
13927
+ values: [
13928
+ "locked",
13929
+ "unlocked",
13930
+ "locking",
13931
+ "unlocking",
13932
+ "jammed"
13933
+ ]
13934
+ } },
13935
+ "media-player": {
13936
+ "volumeLevel": {
13937
+ kind: "gauge",
13938
+ unit: "%",
13939
+ deadband: 1
13940
+ },
13941
+ "isMuted": { kind: "boolean" }
13942
+ },
13943
+ "meter": { "value": {
13944
+ kind: "counter",
13945
+ deadband: .001,
13946
+ minIntervalMs: 6e4
13947
+ } },
13948
+ "motion": { "detected": {
13949
+ kind: "boolean",
13950
+ excludeDeviceTypes: [require_err_msg.DeviceType.Camera]
13951
+ } },
13952
+ "network-link": {
13953
+ "signalPercent": {
13954
+ kind: "gauge",
13955
+ unit: "%",
13956
+ deadband: 3,
13957
+ minIntervalMs: 6e4
13958
+ },
13959
+ "rssiDbm": {
13960
+ kind: "gauge",
13961
+ unit: "dBm",
13962
+ deadband: 2,
13963
+ minIntervalMs: 6e4
13964
+ }
13965
+ },
13966
+ "numeric-sensor": { "value": {
13967
+ kind: "gauge",
13968
+ minIntervalMs: 3e4
13969
+ } },
13970
+ "pet-feeder": {
13971
+ "foodLevel": { kind: "gauge" },
13972
+ "food1": { kind: "gauge" },
13973
+ "food2": { kind: "gauge" },
13974
+ "batteryPower": {
13975
+ kind: "gauge",
13976
+ unit: "%",
13977
+ deadband: 2
13978
+ },
13979
+ "desiccantLeftDays": {
13980
+ kind: "gauge",
13981
+ unit: "s"
13982
+ }
13983
+ },
13984
+ "power-meter": {
13985
+ "watts": {
13986
+ kind: "gauge",
13987
+ unit: "W",
13988
+ deadband: 1,
13989
+ minIntervalMs: 3e4
13990
+ },
13991
+ "kwhTotal": {
13992
+ kind: "counter",
13993
+ unit: "kWh",
13994
+ deadband: .01,
13995
+ minIntervalMs: 6e4
13996
+ },
13997
+ "volts": {
13998
+ kind: "gauge",
13999
+ unit: "V",
14000
+ deadband: 1,
14001
+ minIntervalMs: 3e4
14002
+ },
14003
+ "amps": {
14004
+ kind: "gauge",
14005
+ unit: "A",
14006
+ deadband: .05,
14007
+ minIntervalMs: 3e4
14008
+ },
14009
+ "va": {
14010
+ kind: "gauge",
14011
+ unit: "VA",
14012
+ deadband: 1,
14013
+ minIntervalMs: 3e4
14014
+ },
14015
+ "powerFactor": {
14016
+ kind: "gauge",
14017
+ unit: "ratio",
14018
+ deadband: .01,
14019
+ minIntervalMs: 6e4
14020
+ }
14021
+ },
14022
+ "presence": { "batteryPercent": {
14023
+ kind: "gauge",
14024
+ unit: "%",
14025
+ deadband: 1
14026
+ } },
14027
+ "pressure-sensor": { "hpa": {
14028
+ kind: "gauge",
14029
+ unit: "hPa",
14030
+ deadband: .1
14031
+ } },
14032
+ "running-state": { "running": { kind: "boolean" } },
14033
+ "smoke": { "detected": { kind: "boolean" } },
14034
+ "stream-params": {
14035
+ "main.bitrate": {
14036
+ kind: "gauge",
14037
+ unit: "kbps"
14038
+ },
14039
+ "main.framerate": {
14040
+ kind: "gauge",
14041
+ unit: "fps"
14042
+ },
14043
+ "sub.bitrate": {
14044
+ kind: "gauge",
14045
+ unit: "kbps"
14046
+ },
14047
+ "sub.framerate": {
14048
+ kind: "gauge",
14049
+ unit: "fps"
14050
+ }
14051
+ },
14052
+ "switch": { "on": { kind: "boolean" } },
14053
+ "tamper": { "tampered": { kind: "boolean" } },
14054
+ "temperature-sensor": { "celsius": {
14055
+ kind: "gauge",
14056
+ unit: "°C",
14057
+ deadband: .1
14058
+ } },
14059
+ "vacuum-control": { "batteryLevel": {
14060
+ kind: "gauge",
14061
+ unit: "%",
14062
+ deadband: 2
14063
+ } },
14064
+ "valve": { "position": {
14065
+ kind: "gauge",
14066
+ unit: "%",
14067
+ minIntervalMs: 0
14068
+ } },
14069
+ "vibration": { "detected": { kind: "boolean" } },
14070
+ "water-heater": {
14071
+ "currentTemp": {
14072
+ kind: "gauge",
14073
+ unit: "°C",
14074
+ deadband: .5
14075
+ },
14076
+ "targetTemp": {
14077
+ kind: "gauge",
14078
+ unit: "°C",
14079
+ minIntervalMs: 0
14080
+ }
14081
+ },
14082
+ "weather": {
14083
+ "temperature": {
14084
+ kind: "gauge",
14085
+ unit: "°C",
14086
+ deadband: .2
14087
+ },
14088
+ "humidity": {
14089
+ kind: "gauge",
14090
+ unit: "%",
14091
+ deadband: 1
14092
+ },
14093
+ "pressure": {
14094
+ kind: "gauge",
14095
+ unit: "hPa",
14096
+ deadband: .5
14097
+ },
14098
+ "windSpeed": {
14099
+ kind: "gauge",
14100
+ unit: "m/s",
14101
+ deadband: .5
14102
+ }
14103
+ }
14104
+ };
14105
+ /**
14106
+ * Keyed-array series (D917), projected from every `history.items` block:
14107
+ * 1 caps (3 item fields). The item key is the series SCOPE;
14108
+ * the series key is `cap:<capName>.<path>[].<field>`.
14109
+ */
14110
+ var HISTORY_ITEM_CATALOG = { "consumables": {
14111
+ path: "items",
14112
+ key: "key",
14113
+ label: "label",
14114
+ fields: {
14115
+ "level": {
14116
+ kind: "gauge",
14117
+ unit: "%",
14118
+ deadband: 2,
14119
+ displayName: "Level"
14120
+ },
14121
+ "status": {
14122
+ kind: "enum",
14123
+ displayName: "Status",
14124
+ values: [
14125
+ "ok",
14126
+ "low",
14127
+ "empty",
14128
+ "full",
14129
+ "replace"
14130
+ ]
14131
+ },
14132
+ "remaining.value": {
14133
+ kind: "gauge",
14134
+ deadband: 1,
14135
+ displayName: "Remaining"
14136
+ }
14137
+ }
14138
+ } };
14139
+ /** Caps that declared `history: 'none'`, sorted. */
14140
+ var HISTORY_NONE_CAPS = [
14141
+ "audio-metrics",
14142
+ "automation-control",
14143
+ "camera-streams",
14144
+ "color",
14145
+ "control",
14146
+ "day-night",
14147
+ "device-discovery",
14148
+ "doorbell",
14149
+ "event-emitter",
14150
+ "feature-probe",
14151
+ "group-commands",
14152
+ "group-status",
14153
+ "image",
14154
+ "image-settings",
14155
+ "intercom",
14156
+ "motion-trigger",
14157
+ "motion-zones",
14158
+ "native-object-detection",
14159
+ "navigation",
14160
+ "notifier",
14161
+ "privacy-mask",
14162
+ "ptz-autotrack",
14163
+ "recording-onboard",
14164
+ "recording-signal",
14165
+ "scene-monitor",
14166
+ "script-runner",
14167
+ "stream-catalog",
14168
+ "stream-signals",
14169
+ "update",
14170
+ "zone-analytics",
14171
+ "zone-rules",
14172
+ "zones"
14173
+ ];
14174
+ /** The series specs of `capName`; empty for a `'none'` cap or an unknown one. */
14175
+ function historyFieldsFor(capName) {
14176
+ return HISTORY_CATALOG[capName] ?? {};
14177
+ }
14178
+ //#endregion
14179
+ //#region src/composition/helpers/compile-history.ts
14180
+ /**
14181
+ * Project a statistics or integral helper onto a new device (D944 §3).
14182
+ * The value field is `series`: the composer fills it from history.
14183
+ */
14184
+ var NOW = {
14185
+ kind: "expression",
14186
+ expr: "now",
14187
+ bindings: {}
14188
+ };
14189
+ function series(member, publish, empty) {
14190
+ return {
14191
+ kind: "series",
14192
+ read: {
14193
+ source: member.source,
14194
+ cap: member.cap,
14195
+ fieldPath: member.fieldPath
14196
+ },
14197
+ publish,
14198
+ empty
14199
+ };
14200
+ }
14201
+ function counts(member) {
14202
+ return {
14203
+ included: series(member, "included", "offline"),
14204
+ excluded: series(member, "excluded", "offline"),
14205
+ total: series(member, "total", "offline")
14206
+ };
14207
+ }
14208
+ function declaredSeriesKind(member) {
14209
+ const field = historyFieldsFor(member.cap)[member.fieldPath];
14210
+ if (field === void 0) return null;
14211
+ return field.kind;
14212
+ }
14213
+ function historyProblems(member) {
14214
+ if (declaredSeriesKind(member) !== null) return [];
14215
+ return [problem("member-constraint", "helper.source", `${member.cap}.${member.fieldPath} has no history declaration`)];
14216
+ }
14217
+ function draft(input) {
14218
+ return {
14219
+ target: {
14220
+ kind: "new",
14221
+ type: require_err_msg.DeviceType.Sensor,
14222
+ role: input.role
14223
+ },
14224
+ helper: input.spec,
14225
+ features: [{
14226
+ kind: "fields",
14227
+ cap: input.cap,
14228
+ fields: {
14229
+ [input.field]: series(input.member, "value", input.empty),
14230
+ lastFetchedAt: NOW
14231
+ }
14232
+ }, {
14233
+ kind: "fields",
14234
+ cap: "group-status",
14235
+ fields: counts(input.member)
14236
+ }]
14237
+ };
14238
+ }
14239
+ function statisticDraft(spec, retention = require_composition.DEFAULT_HISTORY_RETENTION) {
14240
+ const problems = [...historyProblems(spec.source)];
14241
+ const kind = declaredSeriesKind(spec.source);
14242
+ if (kind === "enum") problems.push(problem("kind-mismatch", "helper.source", "a statistic reads a number or a boolean, not a state"));
14243
+ if (spec.stat === "sum" && kind !== "counter") problems.push(problem("kind-mismatch", "helper.stat", "a gauge has no sum — that is the integral template"));
14244
+ const tier = require_composition.planStatisticTier(spec.window, retention);
14245
+ if (!tier.ok) problems.push(problem("retention", "helper.window", tier.reason));
14246
+ return {
14247
+ problems,
14248
+ draft: draft({
14249
+ role: require_err_msg.DeviceRole.NumericSensor,
14250
+ cap: "numeric-sensor",
14251
+ field: "value",
14252
+ empty: "null",
14253
+ spec,
14254
+ member: spec.source
14255
+ })
14256
+ };
14257
+ }
14258
+ function integralDraft(spec, retention = require_composition.DEFAULT_HISTORY_RETENTION) {
14259
+ const problems = [...historyProblems(spec.source)];
14260
+ const kind = declaredSeriesKind(spec.source);
14261
+ const watts = spec.source.cap === "power-meter" && spec.source.fieldPath === "watts";
14262
+ if (kind === "counter" || kind === "boolean" || kind === "enum") problems.push(problem("kind-mismatch", "helper.source", "an integral reads an instantaneous gauge, not a counter or a state"));
14263
+ if (spec.output === "energy" && !watts) problems.push(problem("kind-mismatch", "helper.output", "energy is the integral of power-meter.watts; another reading uses the meter"));
14264
+ if (spec.output === "meter" && watts) problems.push(problem("kind-mismatch", "helper.output", "power integrates to power-meter.kwhTotal, which energy dashboards already read"));
14265
+ const tier = require_composition.planResetTier(spec.reset, retention);
14266
+ if (!tier.ok) problems.push(problem("retention", "helper.reset", tier.reason));
14267
+ const energy = spec.output === "energy";
14268
+ return {
14269
+ problems,
14270
+ draft: draft({
14271
+ role: energy ? require_err_msg.DeviceRole.EnergySensor : require_err_msg.DeviceRole.NumericSensor,
14272
+ cap: energy ? "power-meter" : "meter",
14273
+ field: energy ? "kwhTotal" : "value",
14274
+ empty: "offline",
14275
+ spec,
14276
+ member: spec.source
14277
+ })
14278
+ };
14279
+ }
14280
+ //#endregion
13726
14281
  //#region src/composition/helpers/compile.ts
13727
14282
  function sameSource(a, b) {
13728
14283
  return a.addonId === b.addonId && a.stableId === b.stableId;
@@ -13866,8 +14421,29 @@ function compileAppliance(spec) {
13866
14421
  });
13867
14422
  }
13868
14423
  /** Compile a helper template to a new-device composition. Refusals are named. */
13869
- function compileHelper(spec) {
13870
- if (spec.kind === "appliance") return compileAppliance(spec);
14424
+ function compileHelper(spec, retention = require_composition.DEFAULT_HISTORY_RETENTION) {
14425
+ switch (spec.kind) {
14426
+ case "group": return compileGroup(spec);
14427
+ case "appliance": return compileAppliance(spec);
14428
+ case "statistic": {
14429
+ const built = statisticDraft(spec, retention);
14430
+ if (built.problems.length > 0) return {
14431
+ ok: false,
14432
+ problems: built.problems
14433
+ };
14434
+ return parseDraft(built.draft);
14435
+ }
14436
+ case "integral": {
14437
+ const built = integralDraft(spec, retention);
14438
+ if (built.problems.length > 0) return {
14439
+ ok: false,
14440
+ problems: built.problems
14441
+ };
14442
+ return parseDraft(built.draft);
14443
+ }
14444
+ }
14445
+ }
14446
+ function compileGroup(spec) {
13871
14447
  const template = groupTemplate(spec.templateId);
13872
14448
  if (template === null) return {
13873
14449
  ok: false,
@@ -13898,6 +14474,7 @@ function sameHelperBody(stored, compiled) {
13898
14474
  }
13899
14475
  function templateDeviceType(spec) {
13900
14476
  if (spec.kind === "appliance") return require_composition.applianceDeviceType(spec.appliance);
14477
+ if (spec.kind !== "group") return null;
13901
14478
  return groupTemplate(spec.templateId)?.memberDeviceType ?? null;
13902
14479
  }
13903
14480
  //#endregion
@@ -13907,6 +14484,7 @@ function templateDeviceType(spec) {
13907
14484
  * this spec's, and members that report a quantity must share one (D944 §4).
13908
14485
  */
13909
14486
  function quantityProblems(spec, facts) {
14487
+ if (spec.kind !== "group") return [];
13910
14488
  const template = groupTemplate(spec.templateId);
13911
14489
  if (template === null || template.family !== "numeric") return [];
13912
14490
  const known = spec.members.flatMap((member, index) => {
@@ -13922,6 +14500,7 @@ function quantityProblems(spec, facts) {
13922
14500
  return [problem("mixed-quantity", "helper.members", `a numeric group requires one quantity; members report ${distinct.join(" and ")}`)];
13923
14501
  }
13924
14502
  function deviceTypeProblems(spec, facts) {
14503
+ if (spec.kind !== "group") return [];
13925
14504
  const template = groupTemplate(spec.templateId);
13926
14505
  if (template === null) return [];
13927
14506
  return spec.members.flatMap((member, index) => {
@@ -13941,6 +14520,7 @@ function helperSaveProblems(composition, facts) {
13941
14520
  if (!compiled.ok) return compiled.problems;
13942
14521
  if (!sameHelperBody(composition, compiled.composition)) return [problem("helper-mismatch", "helper", "the stored features are not this template — the helper spec is the only writer")];
13943
14522
  if (spec.kind === "appliance") return applianceMemberProblems(spec.member, facts);
14523
+ if (spec.kind !== "group") return [];
13944
14524
  return [...quantityProblems(spec, facts), ...deviceTypeProblems(spec, facts)];
13945
14525
  }
13946
14526
  function applianceMemberProblems(member, facts) {
@@ -46460,7 +47040,20 @@ var NcRuleInputSchema = zod.z.object({
46460
47040
  * save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
46461
47041
  * path does not run Zod defaults.
46462
47042
  */
46463
- groupingSec: zod.z.number().int().min(5).max(60).optional()
47043
+ groupingSec: zod.z.number().int().min(5).max(60).optional(),
47044
+ /**
47045
+ * ASK ME TO CONFIRM DETECTIONS (#243): a DETECTION notification of this rule
47046
+ * carries "Correct" / "Wrong" buttons (and, where the channel has room, a
47047
+ * "Wrong, it is a <class>" choice). A tap marks the track for retraining, the
47048
+ * same mark the Library writes, and records whose notification it was and
47049
+ * when. A channel with no buttons gets the same two choices as links.
47050
+ *
47051
+ * `.optional()`, never `.default()` (a Zod default does not run on the addon
47052
+ * cap path): absent and `false` both mean off, which is what every rule
47053
+ * authored before this field meant. An editor turns it off by writing
47054
+ * `false`, so it needs no `clear` key.
47055
+ */
47056
+ askVerdict: zod.z.boolean().optional()
46464
47057
  });
46465
47058
  /**
46466
47059
  * Partial patch for `updateRule` — any subset of the input fields, plus the
@@ -66693,6 +67286,46 @@ var lockControlCapability = {
66693
67286
  volatileStateFields: ["lastChangedAt"]
66694
67287
  };
66695
67288
  //#endregion
67289
+ //#region src/capabilities/meter.cap.ts
67290
+ /**
67291
+ * A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
67292
+ * so dashboards keep one series; every other instantaneous reading lands here.
67293
+ * `value` is the time integral in the source quantity's accumulated base
67294
+ * (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
67295
+ */
67296
+ var MeterStatusSchema = zod.z.object({
67297
+ value: zod.z.number().nullable().meta(require_sleep.readingMeta("device", { label: "Total" })),
67298
+ lastFetchedAt: zod.z.number()
67299
+ });
67300
+ var meterCapability = {
67301
+ name: "meter",
67302
+ scope: "device",
67303
+ deviceNative: true,
67304
+ mode: "singleton",
67305
+ deviceTypes: [require_err_msg.DeviceType.Sensor],
67306
+ methods: {},
67307
+ status: {
67308
+ schema: MeterStatusSchema,
67309
+ kind: "push"
67310
+ },
67311
+ runtimeState: MeterStatusSchema,
67312
+ /**
67313
+ * Runtime-state durability: **restored** — the total is a cache of the
67314
+ * history integral. A restart shows it only until the history pass
67315
+ * recomputes the open period; it is not an in-memory buffer.
67316
+ *
67317
+ * See `RuntimeStateDurability`. Enforced by
67318
+ * `scripts/check-runtime-state-durability.ts`.
67319
+ */
67320
+ durability: "restored",
67321
+ history: { fields: { value: {
67322
+ kind: "counter",
67323
+ deadband: .001,
67324
+ minIntervalMs: 6e4
67325
+ } } },
67326
+ volatileStateFields: ["lastFetchedAt"]
67327
+ };
67328
+ //#endregion
66696
67329
  //#region src/capabilities/media-player.cap.ts
66697
67330
  /**
66698
67331
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -78153,6 +78786,35 @@ function sourcePickForTemplate(template) {
78153
78786
  exclude: []
78154
78787
  };
78155
78788
  }
78789
+ /** A statistic or integral reads one field that declares history. */
78790
+ function sourcePickForHistory(kind) {
78791
+ return {
78792
+ purpose: "historised",
78793
+ multiple: false,
78794
+ max: 1,
78795
+ deviceTypes: [],
78796
+ accept: historyAccept(kind),
78797
+ history: {
78798
+ required: true,
78799
+ minRetentionMs: null
78800
+ },
78801
+ mustBindCaps: [],
78802
+ exclude: []
78803
+ };
78804
+ }
78805
+ function historyAccept(kind) {
78806
+ const fields = [];
78807
+ for (const cap of Object.keys(HISTORY_CATALOG)) for (const [fieldPath, field] of Object.entries(historyFieldsFor(cap))) {
78808
+ if (field.kind === "enum") continue;
78809
+ if (kind === "integral" && field.kind !== "gauge") continue;
78810
+ fields.push({
78811
+ cap,
78812
+ fieldPath,
78813
+ valueKind: field.kind === "boolean" ? "boolean" : "number"
78814
+ });
78815
+ }
78816
+ return fields;
78817
+ }
78156
78818
  //#endregion
78157
78819
  //#region src/units/unit-table.ts
78158
78820
  /**
@@ -78779,6 +79441,13 @@ function evaluateCompositionField(input) {
78779
79441
  case "from": return fromReading(input.read(source), source);
78780
79442
  case "expression": return expressionOutcome(source, input.read, input.now, input.stateful);
78781
79443
  case "aggregate": return aggregateField(source, input.read);
79444
+ case "series": return {
79445
+ state: "unavailable",
79446
+ value: null,
79447
+ reason: "a series field is written from device history",
79448
+ fatal: false,
79449
+ confirmed: false
79450
+ };
78782
79451
  case "code": return {
78783
79452
  state: "unavailable",
78784
79453
  value: null,
@@ -81553,6 +82222,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
81553
82222
  lawnMowerControl: lawnMowerControlCapability,
81554
82223
  lockControl: lockControlCapability,
81555
82224
  mediaPlayer: mediaPlayerCapability,
82225
+ meter: meterCapability,
81556
82226
  motion: motionCapability,
81557
82227
  motionTrigger: motionTriggerCapability,
81558
82228
  motionZones: motionZonesCapability,
@@ -87846,6 +88516,13 @@ var METHOD_ACCESS_MAP = Object.freeze({
87846
88516
  access: "create",
87847
88517
  role: "admin"
87848
88518
  },
88519
+ "meter.getStatus": {
88520
+ capName: "meter",
88521
+ capScope: "device",
88522
+ addonId: null,
88523
+ access: "view",
88524
+ role: "viewer"
88525
+ },
87849
88526
  "metricsProvider.collectSnapshot": {
87850
88527
  capName: "metrics-provider",
87851
88528
  capScope: "system",
@@ -93454,6 +94131,7 @@ var KNOWN_CAP_NAMES = [
93454
94131
  "login-method",
93455
94132
  "media-player",
93456
94133
  "mesh-network",
94134
+ "meter",
93457
94135
  "metrics-provider",
93458
94136
  "model-convert",
93459
94137
  "model-distributor",
@@ -93593,6 +94271,7 @@ var DEVICE_CAP_NAMES = [
93593
94271
  "lawn-mower-control",
93594
94272
  "lock-control",
93595
94273
  "media-player",
94274
+ "meter",
93596
94275
  "motion",
93597
94276
  "motion-detection",
93598
94277
  "motion-trigger",
@@ -97189,6 +97868,17 @@ var SENSOR_CAP_VOCABULARY = {
97189
97868
  }],
97190
97869
  events: { onMotionChanged: { notOperatorFacing: "the `detected` state trigger phrases both edges, from the mirror that survives a dropped event (D49)" } }
97191
97870
  },
97871
+ meter: {
97872
+ scope: "device",
97873
+ noun: t("Meter", "Contatore"),
97874
+ state: [{
97875
+ kind: "numeric",
97876
+ field: "value",
97877
+ quantity: t("the total", "il totale"),
97878
+ label: t("Total", "Totale"),
97879
+ icon: "gauge"
97880
+ }]
97881
+ },
97192
97882
  "numeric-sensor": {
97193
97883
  scope: "device",
97194
97884
  noun: t("Sensor", "Sensore"),
@@ -99387,6 +100077,7 @@ var CAP_NAMES_WITH_STATUS = [
99387
100077
  "lawn-mower-control",
99388
100078
  "lock-control",
99389
100079
  "media-player",
100080
+ "meter",
99390
100081
  "motion",
99391
100082
  "motion-trigger",
99392
100083
  "motion-zones",
@@ -99522,6 +100213,7 @@ var CAPABILITY_NAMES = {
99522
100213
  loginMethod: "login-method",
99523
100214
  mediaPlayer: "media-player",
99524
100215
  meshNetwork: "mesh-network",
100216
+ meter: "meter",
99525
100217
  metricsProvider: "metrics-provider",
99526
100218
  modelConvert: "model-convert",
99527
100219
  modelDistributor: "model-distributor",
@@ -99996,6 +100688,10 @@ var CAPABILITY_ROUTER_KEYS = [
99996
100688
  key: "meshNetwork",
99997
100689
  name: "mesh-network"
99998
100690
  },
100691
+ {
100692
+ key: "meter",
100693
+ name: "meter"
100694
+ },
99999
100695
  {
100000
100696
  key: "metricsProvider",
100001
100697
  name: "metrics-provider"
@@ -100451,6 +101147,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
100451
101147
  loginMethodCapability,
100452
101148
  mediaPlayerCapability,
100453
101149
  meshNetworkCapability,
101150
+ meterCapability,
100454
101151
  metricsProviderCapability,
100455
101152
  modelConvertCapability,
100456
101153
  modelDistributorCapability,
@@ -101717,6 +102414,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
101717
102414
  form: "single",
101718
102415
  optional: false
101719
102416
  }],
102417
+ "meter.getStatus": [{
102418
+ name: "deviceId",
102419
+ form: "single",
102420
+ optional: false
102421
+ }],
101720
102422
  "motion.getStatus": [{
101721
102423
  name: "deviceId",
101722
102424
  form: "single",
@@ -103528,7 +104230,7 @@ function getCapsByProviderKind(kind) {
103528
104230
  //#region src/generated/runtime-state-durability.ts
103529
104231
  /**
103530
104232
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
103531
- * `runtimeState`. 74 caps: 38 `restored`, 36 `session`.
104233
+ * `runtimeState`. 75 caps: 39 `restored`, 36 `session`.
103532
104234
  *
103533
104235
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
103534
104236
  * with `durability: 'session'` has one and has decided not to keep it.
@@ -103690,6 +104392,10 @@ var RUNTIME_STATE_POLICY = {
103690
104392
  durability: "session",
103691
104393
  volatileFields: []
103692
104394
  },
104395
+ "meter": {
104396
+ durability: "restored",
104397
+ volatileFields: ["lastFetchedAt"]
104398
+ },
103693
104399
  "motion": {
103694
104400
  durability: "session",
103695
104401
  volatileFields: []
@@ -103871,6 +104577,7 @@ var RESTORED_CAP_NAMES = [
103871
104577
  "humidity-sensor",
103872
104578
  "image-settings",
103873
104579
  "lock-control",
104580
+ "meter",
103874
104581
  "motion-zones",
103875
104582
  "native-object-detection",
103876
104583
  "network-link",
@@ -103993,438 +104700,6 @@ var BucketAccumulator = class {
103993
104700
  }
103994
104701
  };
103995
104702
  //#endregion
103996
- //#region src/generated/history-catalog.ts
103997
- /**
103998
- * Cap history catalog, projected from every `*.cap.ts` `history` block.
103999
- * 41 caps with series (75 series), 32 caps answered `'none'`.
104000
- * Field keys are `runtimeState` paths (`a.b` into fixed objects only).
104001
- */
104002
- var HISTORY_CATALOG = {
104003
- "air-quality-sensor": {
104004
- "co2Ppm": {
104005
- kind: "gauge",
104006
- unit: "ppm",
104007
- deadband: 5
104008
- },
104009
- "vocPpb": {
104010
- kind: "gauge",
104011
- unit: "ppb",
104012
- deadband: 5
104013
- },
104014
- "pm25": {
104015
- kind: "gauge",
104016
- unit: "µg/m³",
104017
- deadband: 1
104018
- },
104019
- "pm10": {
104020
- kind: "gauge",
104021
- unit: "µg/m³",
104022
- deadband: 1
104023
- },
104024
- "aqi": {
104025
- kind: "gauge",
104026
- unit: "count",
104027
- deadband: 1
104028
- }
104029
- },
104030
- "alarm-panel": { "state": {
104031
- kind: "enum",
104032
- values: [
104033
- "disarmed",
104034
- "armed_home",
104035
- "armed_away",
104036
- "armed_night",
104037
- "armed_vacation",
104038
- "armed_custom_bypass",
104039
- "arming",
104040
- "disarming",
104041
- "pending",
104042
- "triggered"
104043
- ]
104044
- } },
104045
- "ambient-light-sensor": { "lux": {
104046
- kind: "gauge",
104047
- unit: "lx",
104048
- deadbandPct: 10,
104049
- minIntervalMs: 6e4
104050
- } },
104051
- "battery": {
104052
- "percentage": {
104053
- kind: "gauge",
104054
- unit: "%"
104055
- },
104056
- "volts": {
104057
- kind: "gauge",
104058
- unit: "V"
104059
- }
104060
- },
104061
- "binary": { "on": { kind: "boolean" } },
104062
- "brightness": { "percentage": {
104063
- kind: "gauge",
104064
- unit: "%",
104065
- minIntervalMs: 0
104066
- } },
104067
- "carbon-monoxide": { "detected": { kind: "boolean" } },
104068
- "climate-control": {
104069
- "currentTemp": {
104070
- kind: "gauge",
104071
- unit: "°C",
104072
- deadband: .1
104073
- },
104074
- "currentHumidity": {
104075
- kind: "gauge",
104076
- unit: "%",
104077
- deadband: .5
104078
- },
104079
- "target": {
104080
- kind: "gauge",
104081
- unit: "°C",
104082
- minIntervalMs: 0
104083
- },
104084
- "targetHigh": {
104085
- kind: "gauge",
104086
- unit: "°C",
104087
- minIntervalMs: 0
104088
- },
104089
- "targetLow": {
104090
- kind: "gauge",
104091
- unit: "°C",
104092
- minIntervalMs: 0
104093
- }
104094
- },
104095
- "connectivity": { "connected": { kind: "boolean" } },
104096
- "contact": { "entryOpen": { kind: "boolean" } },
104097
- "cover": { "position": {
104098
- kind: "gauge",
104099
- unit: "%",
104100
- minIntervalMs: 0
104101
- } },
104102
- "device-status": { "online": { kind: "boolean" } },
104103
- "dishwasher": {
104104
- "progressPercent": {
104105
- kind: "gauge",
104106
- unit: "%",
104107
- deadband: 2
104108
- },
104109
- "state": {
104110
- kind: "enum",
104111
- values: [
104112
- "idle",
104113
- "running",
104114
- "paused",
104115
- "finished",
104116
- "error",
104117
- "unavailable"
104118
- ]
104119
- },
104120
- "operationState": {
104121
- kind: "enum",
104122
- values: [
104123
- "Inactive",
104124
- "Ready",
104125
- "DelayedStart",
104126
- "Run",
104127
- "Pause",
104128
- "ActionRequired",
104129
- "Finished",
104130
- "Error",
104131
- "Aborting"
104132
- ]
104133
- },
104134
- "remainingSeconds": {
104135
- kind: "gauge",
104136
- unit: "s",
104137
- minIntervalMs: 6e4
104138
- },
104139
- "doorOpen": { kind: "boolean" },
104140
- "powerOn": { kind: "boolean" }
104141
- },
104142
- "enum-sensor": { "value": {
104143
- kind: "enum",
104144
- skipWhenSet: "timestamp"
104145
- } },
104146
- "fan-control": {
104147
- "percentage": {
104148
- kind: "gauge",
104149
- unit: "%",
104150
- minIntervalMs: 0
104151
- },
104152
- "oscillating": { kind: "boolean" }
104153
- },
104154
- "flood": { "flooded": { kind: "boolean" } },
104155
- "gas": { "detected": { kind: "boolean" } },
104156
- "heating-valve": { "position": {
104157
- kind: "gauge",
104158
- unit: "%",
104159
- deadband: 1
104160
- } },
104161
- "humidifier": {
104162
- "currentHumidity": {
104163
- kind: "gauge",
104164
- unit: "%",
104165
- deadband: .5
104166
- },
104167
- "on": { kind: "boolean" }
104168
- },
104169
- "humidity-sensor": { "percent": {
104170
- kind: "gauge",
104171
- unit: "%",
104172
- deadband: .5
104173
- } },
104174
- "lawn-mower-control": { "batteryLevel": {
104175
- kind: "gauge",
104176
- unit: "%",
104177
- deadband: 2
104178
- } },
104179
- "lock-control": { "state": {
104180
- kind: "enum",
104181
- values: [
104182
- "locked",
104183
- "unlocked",
104184
- "locking",
104185
- "unlocking",
104186
- "jammed"
104187
- ]
104188
- } },
104189
- "media-player": {
104190
- "volumeLevel": {
104191
- kind: "gauge",
104192
- unit: "%",
104193
- deadband: 1
104194
- },
104195
- "isMuted": { kind: "boolean" }
104196
- },
104197
- "motion": { "detected": {
104198
- kind: "boolean",
104199
- excludeDeviceTypes: [require_err_msg.DeviceType.Camera]
104200
- } },
104201
- "network-link": {
104202
- "signalPercent": {
104203
- kind: "gauge",
104204
- unit: "%",
104205
- deadband: 3,
104206
- minIntervalMs: 6e4
104207
- },
104208
- "rssiDbm": {
104209
- kind: "gauge",
104210
- unit: "dBm",
104211
- deadband: 2,
104212
- minIntervalMs: 6e4
104213
- }
104214
- },
104215
- "numeric-sensor": { "value": {
104216
- kind: "gauge",
104217
- minIntervalMs: 3e4
104218
- } },
104219
- "pet-feeder": {
104220
- "foodLevel": { kind: "gauge" },
104221
- "food1": { kind: "gauge" },
104222
- "food2": { kind: "gauge" },
104223
- "batteryPower": {
104224
- kind: "gauge",
104225
- unit: "%",
104226
- deadband: 2
104227
- },
104228
- "desiccantLeftDays": {
104229
- kind: "gauge",
104230
- unit: "s"
104231
- }
104232
- },
104233
- "power-meter": {
104234
- "watts": {
104235
- kind: "gauge",
104236
- unit: "W",
104237
- deadband: 1,
104238
- minIntervalMs: 3e4
104239
- },
104240
- "kwhTotal": {
104241
- kind: "counter",
104242
- unit: "kWh",
104243
- deadband: .01,
104244
- minIntervalMs: 6e4
104245
- },
104246
- "volts": {
104247
- kind: "gauge",
104248
- unit: "V",
104249
- deadband: 1,
104250
- minIntervalMs: 3e4
104251
- },
104252
- "amps": {
104253
- kind: "gauge",
104254
- unit: "A",
104255
- deadband: .05,
104256
- minIntervalMs: 3e4
104257
- },
104258
- "va": {
104259
- kind: "gauge",
104260
- unit: "VA",
104261
- deadband: 1,
104262
- minIntervalMs: 3e4
104263
- },
104264
- "powerFactor": {
104265
- kind: "gauge",
104266
- unit: "ratio",
104267
- deadband: .01,
104268
- minIntervalMs: 6e4
104269
- }
104270
- },
104271
- "presence": { "batteryPercent": {
104272
- kind: "gauge",
104273
- unit: "%",
104274
- deadband: 1
104275
- } },
104276
- "pressure-sensor": { "hpa": {
104277
- kind: "gauge",
104278
- unit: "hPa",
104279
- deadband: .1
104280
- } },
104281
- "running-state": { "running": { kind: "boolean" } },
104282
- "smoke": { "detected": { kind: "boolean" } },
104283
- "stream-params": {
104284
- "main.bitrate": {
104285
- kind: "gauge",
104286
- unit: "kbps"
104287
- },
104288
- "main.framerate": {
104289
- kind: "gauge",
104290
- unit: "fps"
104291
- },
104292
- "sub.bitrate": {
104293
- kind: "gauge",
104294
- unit: "kbps"
104295
- },
104296
- "sub.framerate": {
104297
- kind: "gauge",
104298
- unit: "fps"
104299
- }
104300
- },
104301
- "switch": { "on": { kind: "boolean" } },
104302
- "tamper": { "tampered": { kind: "boolean" } },
104303
- "temperature-sensor": { "celsius": {
104304
- kind: "gauge",
104305
- unit: "°C",
104306
- deadband: .1
104307
- } },
104308
- "vacuum-control": { "batteryLevel": {
104309
- kind: "gauge",
104310
- unit: "%",
104311
- deadband: 2
104312
- } },
104313
- "valve": { "position": {
104314
- kind: "gauge",
104315
- unit: "%",
104316
- minIntervalMs: 0
104317
- } },
104318
- "vibration": { "detected": { kind: "boolean" } },
104319
- "water-heater": {
104320
- "currentTemp": {
104321
- kind: "gauge",
104322
- unit: "°C",
104323
- deadband: .5
104324
- },
104325
- "targetTemp": {
104326
- kind: "gauge",
104327
- unit: "°C",
104328
- minIntervalMs: 0
104329
- }
104330
- },
104331
- "weather": {
104332
- "temperature": {
104333
- kind: "gauge",
104334
- unit: "°C",
104335
- deadband: .2
104336
- },
104337
- "humidity": {
104338
- kind: "gauge",
104339
- unit: "%",
104340
- deadband: 1
104341
- },
104342
- "pressure": {
104343
- kind: "gauge",
104344
- unit: "hPa",
104345
- deadband: .5
104346
- },
104347
- "windSpeed": {
104348
- kind: "gauge",
104349
- unit: "m/s",
104350
- deadband: .5
104351
- }
104352
- }
104353
- };
104354
- /**
104355
- * Keyed-array series (D917), projected from every `history.items` block:
104356
- * 1 caps (3 item fields). The item key is the series SCOPE;
104357
- * the series key is `cap:<capName>.<path>[].<field>`.
104358
- */
104359
- var HISTORY_ITEM_CATALOG = { "consumables": {
104360
- path: "items",
104361
- key: "key",
104362
- label: "label",
104363
- fields: {
104364
- "level": {
104365
- kind: "gauge",
104366
- unit: "%",
104367
- deadband: 2,
104368
- displayName: "Level"
104369
- },
104370
- "status": {
104371
- kind: "enum",
104372
- displayName: "Status",
104373
- values: [
104374
- "ok",
104375
- "low",
104376
- "empty",
104377
- "full",
104378
- "replace"
104379
- ]
104380
- },
104381
- "remaining.value": {
104382
- kind: "gauge",
104383
- deadband: 1,
104384
- displayName: "Remaining"
104385
- }
104386
- }
104387
- } };
104388
- /** Caps that declared `history: 'none'`, sorted. */
104389
- var HISTORY_NONE_CAPS = [
104390
- "audio-metrics",
104391
- "automation-control",
104392
- "camera-streams",
104393
- "color",
104394
- "control",
104395
- "day-night",
104396
- "device-discovery",
104397
- "doorbell",
104398
- "event-emitter",
104399
- "feature-probe",
104400
- "group-commands",
104401
- "group-status",
104402
- "image",
104403
- "image-settings",
104404
- "intercom",
104405
- "motion-trigger",
104406
- "motion-zones",
104407
- "native-object-detection",
104408
- "navigation",
104409
- "notifier",
104410
- "privacy-mask",
104411
- "ptz-autotrack",
104412
- "recording-onboard",
104413
- "recording-signal",
104414
- "scene-monitor",
104415
- "script-runner",
104416
- "stream-catalog",
104417
- "stream-signals",
104418
- "update",
104419
- "zone-analytics",
104420
- "zone-rules",
104421
- "zones"
104422
- ];
104423
- /** The series specs of `capName`; empty for a `'none'` cap or an unknown one. */
104424
- function historyFieldsFor(capName) {
104425
- return HISTORY_CATALOG[capName] ?? {};
104426
- }
104427
- //#endregion
104428
104703
  //#region src/capabilities/runtime-field-unit.ts
104429
104704
  /**
104430
104705
  * The unit a composed-device field row offers convert-unit from (D941, D944).
@@ -115855,6 +116130,7 @@ exports.BrokerTestConnectionResultSchema = TestConnectionResultSchema;
115855
116130
  exports.BrokerUnsubscribeInputSchema = UnsubscribeInputSchema;
115856
116131
  exports.BucketAccumulator = BucketAccumulator;
115857
116132
  exports.BulkRecordSchema = BulkRecordSchema;
116133
+ exports.CALENDAR_PERIODS = require_composition.CALENDAR_PERIODS;
115858
116134
  exports.CALLER_STAMPED_CAPABILITIES = require_sleep.CALLER_STAMPED_CAPABILITIES;
115859
116135
  exports.CAMERA_SENSORS_NOT_LOADED = CAMERA_SENSORS_NOT_LOADED;
115860
116136
  exports.CAMERA_SENSORS_SETTINGS_KEY = CAMERA_SENSORS_SETTINGS_KEY;
@@ -115923,6 +116199,7 @@ exports.CalendarPreferenceEntrySchema = CalendarPreferenceEntrySchema;
115923
116199
  exports.CalendarPreferencesSchema = CalendarPreferencesSchema;
115924
116200
  exports.CalendarSetPreferenceInputSchema = CalendarSetPreferenceInputSchema;
115925
116201
  exports.CalendarSourceKindSchema = CalendarSourceKindSchema;
116202
+ exports.CalendarWindowSchema = require_composition.CalendarWindowSchema;
115926
116203
  exports.CamProfileSchema = require_sleep.CamProfileSchema;
115927
116204
  exports.CamStreamDescriptorSchema = CamStreamDescriptorSchema;
115928
116205
  exports.CamStreamKindSchema = require_sleep.CamStreamKindSchema;
@@ -116053,6 +116330,7 @@ exports.CompositionProblemCodeSchema = CompositionProblemCodeSchema;
116053
116330
  exports.CompositionProblemSchema = CompositionProblemSchema;
116054
116331
  exports.CompositionRunStatusSchema = CompositionRunStatusSchema;
116055
116332
  exports.CompositionSchema = require_composition.CompositionSchema;
116333
+ exports.CompositionSeriesSourceSchema = require_composition.CompositionSeriesSourceSchema;
116056
116334
  exports.CompositionSourceRefSchema = require_composition.CompositionSourceRefSchema;
116057
116335
  exports.CompositionStateReadSchema = CompositionStateReadSchema;
116058
116336
  exports.CompositionTargetSchema = require_composition.CompositionTargetSchema;
@@ -116104,6 +116382,7 @@ exports.DATABASE_SNAPSHOT_TIMEOUT_MS = DATABASE_SNAPSHOT_TIMEOUT_MS;
116104
116382
  exports.DATAPLANE_SECRET_HEADER = require_sleep.DATAPLANE_SECRET_HEADER;
116105
116383
  exports.DATA_STORE_DATABASES = DATA_STORE_DATABASES;
116106
116384
  exports.DAYS_PER_WEEK = DAYS_PER_WEEK;
116385
+ exports.DAY_MS = require_composition.DAY_MS;
116107
116386
  exports.DAY_NAMES = DAY_NAMES;
116108
116387
  exports.DECLARED_DEVICE_SWEEP_LIMIT = DECLARED_DEVICE_SWEEP_LIMIT;
116109
116388
  exports.DECLARED_INTEGRATION_FIXED_KEY = DECLARED_INTEGRATION_FIXED_KEY;
@@ -116123,6 +116402,7 @@ exports.DEFAULT_EVENT_COLOR = DEFAULT_EVENT_COLOR;
116123
116402
  exports.DEFAULT_FEATURES = DEFAULT_FEATURES;
116124
116403
  exports.DEFAULT_FIRST_SIGHTING_FRESHNESS_MS = require_composition.DEFAULT_FIRST_SIGHTING_FRESHNESS_MS;
116125
116404
  exports.DEFAULT_HEADROOM = DEFAULT_HEADROOM;
116405
+ exports.DEFAULT_HISTORY_RETENTION = require_composition.DEFAULT_HISTORY_RETENTION;
116126
116406
  exports.DEFAULT_MIN_LANDMARK_FACE_SIZE_PX = DEFAULT_MIN_LANDMARK_FACE_SIZE_PX;
116127
116407
  exports.DEFAULT_MIN_SESSIONS_PER_DEVICE = DEFAULT_MIN_SESSIONS_PER_DEVICE;
116128
116408
  exports.DEFAULT_NATIVE_LEASE_SETTINGS = DEFAULT_NATIVE_LEASE_SETTINGS;
@@ -116418,10 +116698,14 @@ exports.HF_REPO = require_sleep.HF_REPO;
116418
116698
  exports.HISTORY_BUCKET_MS = HISTORY_BUCKET_MS;
116419
116699
  exports.HISTORY_CATALOG = HISTORY_CATALOG;
116420
116700
  exports.HISTORY_DEFAULT_MIN_INTERVAL_MS = require_sleep.HISTORY_DEFAULT_MIN_INTERVAL_MS;
116701
+ exports.HISTORY_FAST_MS = require_composition.HISTORY_FAST_MS;
116421
116702
  exports.HISTORY_ITEM_CATALOG = HISTORY_ITEM_CATALOG;
116422
116703
  exports.HISTORY_NONE_CAPS = HISTORY_NONE_CAPS;
116704
+ exports.HISTORY_SLOW_MS = require_composition.HISTORY_SLOW_MS;
116705
+ exports.HISTORY_TIERS = require_composition.HISTORY_TIERS;
116423
116706
  exports.HISTORY_UNIT_LABELS = require_sleep.HISTORY_UNIT_LABELS;
116424
116707
  exports.HOURS_PER_DAY = HOURS_PER_DAY;
116708
+ exports.HOUR_MS = require_composition.HOUR_MS;
116425
116709
  exports.HUB_ADDRESS_ROLES = HUB_ADDRESS_ROLES;
116426
116710
  exports.HUB_MDNS_QUERY_NAME = HUB_MDNS_QUERY_NAME;
116427
116711
  exports.HUB_MDNS_ROLE = HUB_MDNS_ROLE;
@@ -116450,6 +116734,7 @@ exports.ICON_VIEWER_MODULES = ICON_VIEWER_MODULES;
116450
116734
  exports.INFERENCE_DEVICE_EXCLUSION_REASONS = INFERENCE_DEVICE_EXCLUSION_REASONS;
116451
116735
  exports.INITIAL_PULSE = INITIAL_PULSE;
116452
116736
  exports.INITIAL_SPAN = INITIAL_SPAN;
116737
+ exports.INTEGRAL_OUTPUTS = require_composition.INTEGRAL_OUTPUTS;
116453
116738
  exports.INVERTIBLE_CAPS = INVERTIBLE_CAPS;
116454
116739
  exports.IconKeySchema = IconKeySchema;
116455
116740
  exports.ImageContractSchema = ImageContractSchema;
@@ -116464,6 +116749,7 @@ exports.ImportModelBundleResultSchema = ImportModelBundleResultSchema;
116464
116749
  exports.InferenceDeviceExclusionReasonSchema = InferenceDeviceExclusionReasonSchema;
116465
116750
  exports.IngestOwnerSchema = IngestOwnerSchema;
116466
116751
  exports.InstalledPackageSchema = InstalledPackageSchema;
116752
+ exports.IntegralHelperSpecSchema = require_composition.IntegralHelperSpecSchema;
116467
116753
  exports.IntegrationLiteSchema = IntegrationLiteSchema;
116468
116754
  exports.IntegrationWithStateSchema = IntegrationWithStateSchema;
116469
116755
  exports.IntercomAbilitySchema = IntercomAbilitySchema;
@@ -116473,6 +116759,7 @@ exports.KEYCHAIN_MAX_REFS_PER_CALL = KEYCHAIN_MAX_REFS_PER_CALL;
116473
116759
  exports.KEYCHAIN_RESET_CONFIRMATION = KEYCHAIN_RESET_CONFIRMATION;
116474
116760
  exports.KEYCHAIN_RESET_TRIGGER_ACTOR = KEYCHAIN_RESET_TRIGGER_ACTOR;
116475
116761
  exports.KNOWN_CAP_NAMES = KNOWN_CAP_NAMES;
116762
+ exports.KWH_PER_WATT_MS = require_composition.KWH_PER_WATT_MS;
116476
116763
  exports.KeptReasonSchema = KeptReasonSchema;
116477
116764
  exports.KeyEventSchema = KeyEventSchema;
116478
116765
  exports.KeychainAdminSecretSchema = KeychainAdminSecretSchema;
@@ -116622,6 +116909,8 @@ exports.MEDIA_PRESENCE_OWNER_KINDS = MEDIA_PRESENCE_OWNER_KINDS;
116622
116909
  exports.METHOD_ACCESS_MAP = METHOD_ACCESS_MAP;
116623
116910
  exports.METHOD_DEVICE_SELECTORS = METHOD_DEVICE_SELECTORS;
116624
116911
  exports.MINUTES_PER_DAY = MINUTES_PER_DAY;
116912
+ exports.MINUTE_MS = require_composition.MINUTE_MS;
116913
+ exports.MIN_CUSTOM_MINUTES = require_composition.MIN_CUSTOM_MINUTES;
116625
116914
  exports.MIN_SCRUBBED_LENGTH = require_sleep.MIN_SCRUBBED_LENGTH;
116626
116915
  exports.MIN_SESSIONS_PER_DEVICE_RANGE = MIN_SESSIONS_PER_DEVICE_RANGE;
116627
116916
  exports.MODEL_FORMATS = require_sleep.MODEL_FORMATS;
@@ -116660,6 +116949,7 @@ exports.MediaRelocateModeSchema = MediaRelocateModeSchema;
116660
116949
  exports.MeshLeafInfoSchema = MeshLeafInfoSchema;
116661
116950
  exports.MeshPeerSchema = MeshPeerSchema;
116662
116951
  exports.MeshStatusSchema = MeshStatusSchema;
116952
+ exports.MeterStatusSchema = MeterStatusSchema;
116663
116953
  exports.MethodAccessSchema = MethodAccessSchema;
116664
116954
  exports.MigrateDeviceResultSchema = MigrateDeviceResultSchema;
116665
116955
  exports.MigrateSwitchOutcomeSchema = MigrateSwitchOutcomeSchema;
@@ -117170,12 +117460,14 @@ exports.REMOVED_MODEL_IDS = REMOVED_MODEL_IDS;
117170
117460
  exports.REMOVE_LEAF = require_sleep.REMOVE_LEAF;
117171
117461
  exports.RESERVED_BINDING_NAMES = require_composition.RESERVED_BINDING_NAMES;
117172
117462
  exports.RESERVED_COLLECTION_SOURCES = RESERVED_COLLECTION_SOURCES;
117463
+ exports.RESET_PERIODS = require_composition.RESET_PERIODS;
117173
117464
  exports.RESTORED_CAP_NAMES = RESTORED_CAP_NAMES;
117174
117465
  exports.RETRAIN_REVIEW_ADJUSTED_IOU = RETRAIN_REVIEW_ADJUSTED_IOU;
117175
117466
  exports.RETRAIN_REVIEW_MATCH_IOU = RETRAIN_REVIEW_MATCH_IOU;
117176
117467
  exports.RETRAIN_REVIEW_STATUSES = RETRAIN_REVIEW_STATUSES;
117177
117468
  exports.RETRAIN_REVISION_CONFLICT = RETRAIN_REVISION_CONFLICT;
117178
117469
  exports.REVALIDATE_AFTER_MS = require_sleep.REVALIDATE_AFTER_MS;
117470
+ exports.ROLLING_SPANS = require_composition.ROLLING_SPANS;
117179
117471
  exports.ROOM_EXAMPLE_MOTION_SOURCES = ROOM_EXAMPLE_MOTION_SOURCES;
117180
117472
  exports.ROOM_EXAMPLE_TEMPERATURE_SOURCES = ROOM_EXAMPLE_TEMPERATURE_SOURCES;
117181
117473
  exports.ROOM_OCCUPANCY_WINDOW_MS = ROOM_OCCUPANCY_WINDOW_MS;
@@ -117328,6 +117620,7 @@ exports.RetrainTransitionResultSchema = RetrainTransitionResultSchema;
117328
117620
  exports.RevConflictError = require_sleep.RevConflictError;
117329
117621
  exports.RevokeOwnDeviceCertificateResultSchema = RevokeOwnDeviceCertificateResultSchema;
117330
117622
  exports.RingBuffer = RingBuffer;
117623
+ exports.RollingWindowSchema = require_composition.RollingWindowSchema;
117331
117624
  exports.RootStepSupplySchema = RootStepSupplySchema;
117332
117625
  exports.RtpSourceSchema = RtpSourceSchema;
117333
117626
  exports.RtspRestreamEntrySchema = RtspRestreamEntrySchema;
@@ -117359,6 +117652,7 @@ exports.SECRET_REF_SCHEME = require_sleep.SECRET_REF_SCHEME;
117359
117652
  exports.SENSOR_FEATURES = SENSOR_FEATURES;
117360
117653
  exports.SENSOR_MAP = SENSOR_MAP;
117361
117654
  exports.SERIAL_CAPACITY_CAMERA_FPS = SERIAL_CAPACITY_CAMERA_FPS;
117655
+ exports.SERIES_KINDS = require_composition.SERIES_KINDS;
117362
117656
  exports.SERVER_NAME_MAX_LENGTH = SERVER_NAME_MAX_LENGTH;
117363
117657
  exports.SERVER_NAME_SETTING_KEY = SERVER_NAME_SETTING_KEY;
117364
117658
  exports.SESSION_PLACEMENT_SETTING_KEY = SESSION_PLACEMENT_SETTING_KEY;
@@ -117377,6 +117671,7 @@ exports.SSO_STATE_COOKIE_MAX_AGE_SEC = SSO_STATE_COOKIE_MAX_AGE_SEC;
117377
117671
  exports.STATE_LABELS = STATE_LABELS;
117378
117672
  exports.STATE_LABEL_KEYS = STATE_LABEL_KEYS;
117379
117673
  exports.STATIONARY_OVERLAY_STYLE = STATIONARY_OVERLAY_STYLE;
117674
+ exports.STATISTIC_STATS = require_composition.STATISTIC_STATS;
117380
117675
  exports.STORAGE_ACCESS_FALLBACK = STORAGE_ACCESS_FALLBACK;
117381
117676
  exports.STORAGE_BYTES_PER_GB = STORAGE_BYTES_PER_GB;
117382
117677
  exports.STORAGE_LOCATION_MODES = STORAGE_LOCATION_MODES;
@@ -117447,6 +117742,8 @@ exports.StaleDevicePinSchema = StaleDevicePinSchema;
117447
117742
  exports.StartEmbeddedInputSchema = StartEmbeddedInputSchema;
117448
117743
  exports.StartEnrollmentOutputSchema = StartEnrollmentOutputSchema;
117449
117744
  exports.StationaryObjectSchema = StationaryObjectSchema;
117745
+ exports.StatisticHelperSpecSchema = require_composition.StatisticHelperSpecSchema;
117746
+ exports.StatisticWindowSchema = require_composition.StatisticWindowSchema;
117450
117747
  exports.StorageAbortUploadInputSchema = AbortUploadInputSchema;
117451
117748
  exports.StorageAccessSchema = StorageAccessSchema;
117452
117749
  exports.StorageBeginDownloadInputSchema = BeginDownloadInputSchema;
@@ -117931,6 +118228,7 @@ exports.dayOfWeekToIndex = dayOfWeekToIndex;
117931
118228
  exports.declarationOwnerNodeId = declarationOwnerNodeId;
117932
118229
  exports.declarationsOf = require_sleep.declarationsOf;
117933
118230
  exports.declareLogChannel = declareLogChannel;
118231
+ exports.declaredSeriesKind = declaredSeriesKind;
117934
118232
  exports.decodeCompositionToCards = decodeCompositionToCards;
117935
118233
  exports.decodeKeyedArrayOverride = decodeKeyedArrayOverride;
117936
118234
  exports.decodePulseOverride = decodePulseOverride;
@@ -118033,6 +118331,7 @@ exports.evaluateRose = require_composition.evaluateRose;
118033
118331
  exports.evaluateSensorEdge = require_composition.evaluateSensorEdge;
118034
118332
  exports.evaluateSensorLevelEdge = require_composition.evaluateSensorLevelEdge;
118035
118333
  exports.evaluateStatefulExpressionCall = require_composition.evaluateStatefulExpressionCall;
118334
+ exports.evaluateStatistic = require_composition.evaluateStatistic;
118036
118335
  exports.evaluateZoneRules = evaluateZoneRules;
118037
118336
  exports.event = require_sleep.event;
118038
118337
  exports.eventEmitterCapability = eventEmitterCapability;
@@ -118127,6 +118426,9 @@ exports.inferExpressionKinds = inferExpressionKinds;
118127
118426
  exports.inferModelProvider = inferModelProvider;
118128
118427
  exports.ingestReading = ingestReading;
118129
118428
  exports.initialPoolMemoryState = initialPoolMemoryState;
118429
+ exports.integralCadenceMs = require_composition.integralCadenceMs;
118430
+ exports.integralDraft = integralDraft;
118431
+ exports.integrateReading = require_composition.integrateReading;
118130
118432
  exports.integrationsCapability = integrationsCapability;
118131
118433
  exports.intercomCapability = intercomCapability;
118132
118434
  exports.interpolate = interpolate;
@@ -118256,6 +118558,7 @@ exports.markdownToHtmlLite = markdownToHtmlLite;
118256
118558
  exports.markdownToText = markdownToText;
118257
118559
  exports.maskUrlCredentials = require_sleep.maskUrlCredentials;
118258
118560
  exports.matchDoAction = matchDoAction;
118561
+ exports.maxDurationMs = require_composition.maxDurationMs;
118259
118562
  exports.mayReadLocation = mayReadLocation;
118260
118563
  exports.mayWriteToLocation = mayWriteToLocation;
118261
118564
  exports.measuredCapacityFromResults = measuredCapacityFromResults;
@@ -118269,6 +118572,7 @@ exports.mergeSecretStatePaths = require_sleep.mergeSecretStatePaths;
118269
118572
  exports.mergeSettingsBags = mergeSettingsBags;
118270
118573
  exports.mergeSourceInfo = mergeSourceInfo;
118271
118574
  exports.meshNetworkCapability = meshNetworkCapability;
118575
+ exports.meterCapability = meterCapability;
118272
118576
  exports.method = require_sleep.method;
118273
118577
  exports.methodAccessForHttpMethod = methodAccessForHttpMethod;
118274
118578
  exports.methodRoleOf = methodRoleOf;
@@ -118295,6 +118599,7 @@ exports.ncMediaPolicyError = ncMediaPolicyError;
118295
118599
  exports.networkAccessCapability = networkAccessCapability;
118296
118600
  exports.networkLinkCapability = networkLinkCapability;
118297
118601
  exports.networkQualityCapability = networkQualityCapability;
118602
+ exports.nextLocalMidnight = require_composition.nextLocalMidnight;
118298
118603
  exports.nodeBenchmarkRefusals = nodeBenchmarkRefusals;
118299
118604
  exports.nodeCertificatesCapability = nodeCertificatesCapability;
118300
118605
  exports.nodePickerItems = nodePickerItems;
@@ -118321,6 +118626,8 @@ exports.objectInputDeclaresRequiredDeviceId = objectInputDeclaresRequiredDeviceI
118321
118626
  exports.occupancyScope = occupancyScope;
118322
118627
  exports.oidcConnectionsCapability = oidcConnectionsCapability;
118323
118628
  exports.omitTransientConfig = require_sleep.omitTransientConfig;
118629
+ exports.openReset = require_composition.openReset;
118630
+ exports.openStatistic = require_composition.openStatistic;
118324
118631
  exports.optionalAncestors = optionalAncestors;
118325
118632
  exports.optionalMethod = require_sleep.optionalMethod;
118326
118633
  exports.osdCapability = osdCapability;
@@ -118389,6 +118696,8 @@ exports.planItems = planItems;
118389
118696
  exports.planMotionCropRegions = planMotionCropRegions;
118390
118697
  exports.planMotionCrops = planMotionCrops;
118391
118698
  exports.planRecoveryCrops = planRecoveryCrops;
118699
+ exports.planResetTier = require_composition.planResetTier;
118700
+ exports.planStatisticTier = require_composition.planStatisticTier;
118392
118701
  exports.plateGalleryCapability = plateGalleryCapability;
118393
118702
  exports.platformProbeCapability = platformProbeCapability;
118394
118703
  exports.plusCatalogDefaultClassFloors = plusCatalogDefaultClassFloors;
@@ -118511,6 +118820,7 @@ exports.resultStandings = resultStandings;
118511
118820
  exports.retrainBoxIou = retrainBoxIou;
118512
118821
  exports.retrainRevisionConflictMessage = retrainRevisionConflictMessage;
118513
118822
  exports.roleSpec = roleSpec;
118823
+ exports.rollingDurationMs = require_composition.rollingDurationMs;
118514
118824
  exports.roomCompositionExample = roomCompositionExample;
118515
118825
  exports.rootSuppliesOf = rootSuppliesOf;
118516
118826
  exports.rootSupplyServes = rootSupplyServes;
@@ -118592,6 +118902,7 @@ exports.smokeCapability = smokeCapability;
118592
118902
  exports.smtpProviderCapability = smtpProviderCapability;
118593
118903
  exports.snapshotCapability = snapshotCapability;
118594
118904
  exports.sourcePickForAppliance = require_composition.sourcePickForAppliance;
118905
+ exports.sourcePickForHistory = sourcePickForHistory;
118595
118906
  exports.sourcePickForTemplate = sourcePickForTemplate;
118596
118907
  exports.splitTranslationRef = splitTranslationRef;
118597
118908
  exports.squareAround = squareAround;
@@ -118600,6 +118911,8 @@ exports.startMoverUnderClearance = startMoverUnderClearance;
118600
118911
  exports.startReachabilityPoll = startReachabilityPoll;
118601
118912
  exports.stateLabel = stateLabel;
118602
118913
  exports.stateVocabularyFor = stateVocabularyFor;
118914
+ exports.statisticCadenceMs = require_composition.statisticCadenceMs;
118915
+ exports.statisticDraft = statisticDraft;
118603
118916
  exports.stepModelRunsOnFormat = stepModelRunsOnFormat;
118604
118917
  exports.stepPulse = stepPulse;
118605
118918
  exports.stepSettingSource = stepSettingSource;
@@ -118711,6 +119024,7 @@ exports.viewerUiCapability = require_sleep.viewerUiCapability;
118711
119024
  exports.vocabularyActionsForDevice = actionsForDevice$1;
118712
119025
  exports.vocabularyTriggersForDevice = triggersForDevice;
118713
119026
  exports.waterHeaterCapability = waterHeaterCapability;
119027
+ exports.wattMillisecondsToKwh = require_composition.wattMillisecondsToKwh;
118714
119028
  exports.weatherCapability = weatherCapability;
118715
119029
  exports.webrtcClientHintsSchema = webrtcClientHintsSchema;
118716
119030
  exports.webrtcSessionCapability = webrtcSessionCapability;