@camstack/addon-agent-ui 1.2.284 → 1.2.286

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -5448,7 +5448,7 @@ var ZodIssueCode = {
5448
5448
  var ZodFirstPartyTypeKind;
5449
5449
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5450
5450
  //#endregion
5451
- //#region ../types/dist/sleep-DFaVPxfm.mjs
5451
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5452
5452
  /**
5453
5453
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5454
5454
  * window to float samples (D455).
@@ -8705,11 +8705,11 @@ var CAP_NAMES = Object.freeze([
8705
8705
  Object.freeze({
8706
8706
  "air-quality-sensor": [
8707
8707
  {
8708
- "path": "co2Ppm",
8708
+ "path": "co2",
8709
8709
  "valueType": "number"
8710
8710
  },
8711
8711
  {
8712
- "path": "vocPpb",
8712
+ "path": "voc",
8713
8713
  "valueType": "number"
8714
8714
  },
8715
8715
  {
@@ -8759,7 +8759,7 @@ Object.freeze({
8759
8759
  }
8760
8760
  ],
8761
8761
  "ambient-light-sensor": [{
8762
- "path": "lux",
8762
+ "path": "illuminance",
8763
8763
  "valueType": "number"
8764
8764
  }],
8765
8765
  "audio-metrics": [
@@ -8820,7 +8820,7 @@ Object.freeze({
8820
8820
  ],
8821
8821
  "battery": [
8822
8822
  {
8823
- "path": "percentage",
8823
+ "path": "level",
8824
8824
  "valueType": "number"
8825
8825
  },
8826
8826
  {
@@ -8842,7 +8842,7 @@ Object.freeze({
8842
8842
  "valueType": "number"
8843
8843
  },
8844
8844
  {
8845
- "path": "volts",
8845
+ "path": "voltage",
8846
8846
  "valueType": "number"
8847
8847
  },
8848
8848
  {
@@ -8863,7 +8863,7 @@ Object.freeze({
8863
8863
  "valueType": "boolean"
8864
8864
  }],
8865
8865
  "brightness": [{
8866
- "path": "percentage",
8866
+ "path": "level",
8867
8867
  "valueType": "number"
8868
8868
  }],
8869
8869
  "broker": [{
@@ -9064,7 +9064,7 @@ Object.freeze({
9064
9064
  "valueType": "number"
9065
9065
  },
9066
9066
  {
9067
- "path": "mireds",
9067
+ "path": "colorTemperature",
9068
9068
  "valueType": "number"
9069
9069
  }
9070
9070
  ],
@@ -9243,15 +9243,15 @@ Object.freeze({
9243
9243
  "valueType": "string"
9244
9244
  },
9245
9245
  {
9246
- "path": "remainingSeconds",
9246
+ "path": "remaining",
9247
9247
  "valueType": "number"
9248
9248
  },
9249
9249
  {
9250
- "path": "delayedStartSeconds",
9250
+ "path": "delayedStart",
9251
9251
  "valueType": "number"
9252
9252
  },
9253
9253
  {
9254
- "path": "progressPercent",
9254
+ "path": "progress",
9255
9255
  "valueType": "number"
9256
9256
  },
9257
9257
  {
@@ -9365,7 +9365,7 @@ Object.freeze({
9365
9365
  ],
9366
9366
  "fan-control": [
9367
9367
  {
9368
- "path": "percentage",
9368
+ "path": "speed",
9369
9369
  "valueType": "number"
9370
9370
  },
9371
9371
  {
@@ -9465,7 +9465,7 @@ Object.freeze({
9465
9465
  }
9466
9466
  ],
9467
9467
  "humidity-sensor": [{
9468
- "path": "percent",
9468
+ "path": "humidity",
9469
9469
  "valueType": "number"
9470
9470
  }],
9471
9471
  "image": [{
@@ -9575,7 +9575,7 @@ Object.freeze({
9575
9575
  "valueType": "number"
9576
9576
  },
9577
9577
  {
9578
- "path": "progressPercent",
9578
+ "path": "progress",
9579
9579
  "valueType": "number"
9580
9580
  },
9581
9581
  {
@@ -9654,11 +9654,11 @@ Object.freeze({
9654
9654
  "valueType": "string"
9655
9655
  },
9656
9656
  {
9657
- "path": "positionMs",
9657
+ "path": "position",
9658
9658
  "valueType": "number"
9659
9659
  },
9660
9660
  {
9661
- "path": "durationMs",
9661
+ "path": "duration",
9662
9662
  "valueType": "number"
9663
9663
  },
9664
9664
  {
@@ -9760,11 +9760,11 @@ Object.freeze({
9760
9760
  ]
9761
9761
  },
9762
9762
  {
9763
- "path": "signalPercent",
9763
+ "path": "signal",
9764
9764
  "valueType": "number"
9765
9765
  },
9766
9766
  {
9767
- "path": "rssiDbm",
9767
+ "path": "rssi",
9768
9768
  "valueType": "number"
9769
9769
  },
9770
9770
  {
@@ -9895,23 +9895,23 @@ Object.freeze({
9895
9895
  ],
9896
9896
  "power-meter": [
9897
9897
  {
9898
- "path": "watts",
9898
+ "path": "power",
9899
9899
  "valueType": "number"
9900
9900
  },
9901
9901
  {
9902
- "path": "kwhTotal",
9902
+ "path": "energy",
9903
9903
  "valueType": "number"
9904
9904
  },
9905
9905
  {
9906
- "path": "volts",
9906
+ "path": "voltage",
9907
9907
  "valueType": "number"
9908
9908
  },
9909
9909
  {
9910
- "path": "amps",
9910
+ "path": "current",
9911
9911
  "valueType": "number"
9912
9912
  },
9913
9913
  {
9914
- "path": "va",
9914
+ "path": "apparentPower",
9915
9915
  "valueType": "number"
9916
9916
  },
9917
9917
  {
@@ -9939,14 +9939,10 @@ Object.freeze({
9939
9939
  {
9940
9940
  "path": "gps.accuracyMeters",
9941
9941
  "valueType": "number"
9942
- },
9943
- {
9944
- "path": "batteryPercent",
9945
- "valueType": "number"
9946
9942
  }
9947
9943
  ],
9948
9944
  "pressure-sensor": [{
9949
- "path": "hpa",
9945
+ "path": "pressure",
9950
9946
  "valueType": "number"
9951
9947
  }],
9952
9948
  "privacy-mask": [{
@@ -10260,7 +10256,7 @@ Object.freeze({
10260
10256
  "valueType": "boolean"
10261
10257
  }],
10262
10258
  "temperature-sensor": [{
10263
- "path": "celsius",
10259
+ "path": "temperature",
10264
10260
  "valueType": "number"
10265
10261
  }],
10266
10262
  "update": [
@@ -10308,7 +10304,7 @@ Object.freeze({
10308
10304
  "valueType": "string"
10309
10305
  },
10310
10306
  {
10311
- "path": "progressPercent",
10307
+ "path": "progress",
10312
10308
  "valueType": "number"
10313
10309
  },
10314
10310
  {
@@ -10783,7 +10779,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
10783
10779
  return DeviceRole;
10784
10780
  }({});
10785
10781
  //#endregion
10786
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
10782
+ //#region ../types/dist/composition-DwA0uVW5.mjs
10787
10783
  /**
10788
10784
  * The ffmpeg build every CamStack node downloads, per platform and arch.
10789
10785
  *
@@ -18413,7 +18409,7 @@ var CompositionEventPlanSchema = object({
18413
18409
  stateField: string(),
18414
18410
  fieldKey: string()
18415
18411
  });
18416
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
18412
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
18417
18413
  var CompositionProblemSchema = object({
18418
18414
  code: _enum([
18419
18415
  "reserved-variant",
@@ -18695,12 +18691,13 @@ var CHANGED = {
18695
18691
  expr: "now"
18696
18692
  };
18697
18693
  function numeric(input) {
18694
+ const { alsoFrom, ...base } = input;
18698
18695
  return {
18699
- ...input,
18696
+ ...base,
18700
18697
  family: "numeric",
18701
18698
  deviceType: DeviceType.Sensor,
18702
18699
  memberDeviceType: DeviceType.Sensor,
18703
- memberDeviceTypes: [DeviceType.Sensor],
18700
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
18704
18701
  activeWhen: void 0,
18705
18702
  commandCaps: [],
18706
18703
  baseUnit: baseUnitOf(input.quantity),
@@ -18708,9 +18705,10 @@ function numeric(input) {
18708
18705
  accept: [{
18709
18706
  cap: input.outputCap,
18710
18707
  fieldPath: input.outputField
18711
- }]
18708
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
18712
18709
  };
18713
18710
  }
18711
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
18714
18712
  function binary(input) {
18715
18713
  return {
18716
18714
  ...input,
@@ -18732,29 +18730,43 @@ var GROUP_TEMPLATES = [
18732
18730
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
18733
18731
  role: DeviceRole.TemperatureSensor,
18734
18732
  outputCap: "temperature-sensor",
18735
- outputField: "celsius",
18733
+ outputField: "temperature",
18736
18734
  quantity: "temperature",
18737
18735
  defaultAggregate: "mean",
18738
18736
  empty: "null",
18739
- companions: [NOW$2]
18737
+ companions: [NOW$2],
18738
+ alsoFrom: {
18739
+ deviceTypes: CLIMATE_DEVICES,
18740
+ accept: {
18741
+ cap: "climate-control",
18742
+ fieldPath: "currentTemp"
18743
+ }
18744
+ }
18740
18745
  }),
18741
18746
  numeric({
18742
18747
  id: "humidity",
18743
18748
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
18744
18749
  role: DeviceRole.HumiditySensor,
18745
18750
  outputCap: "humidity-sensor",
18746
- outputField: "percent",
18751
+ outputField: "humidity",
18747
18752
  quantity: "humidity",
18748
18753
  defaultAggregate: "mean",
18749
18754
  empty: "null",
18750
- companions: [NOW$2]
18755
+ companions: [NOW$2],
18756
+ alsoFrom: {
18757
+ deviceTypes: CLIMATE_DEVICES,
18758
+ accept: {
18759
+ cap: "climate-control",
18760
+ fieldPath: "currentHumidity"
18761
+ }
18762
+ }
18751
18763
  }),
18752
18764
  numeric({
18753
18765
  id: "pressure",
18754
18766
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
18755
18767
  role: DeviceRole.PressureSensor,
18756
18768
  outputCap: "pressure-sensor",
18757
- outputField: "hpa",
18769
+ outputField: "pressure",
18758
18770
  quantity: "pressure",
18759
18771
  defaultAggregate: "mean",
18760
18772
  empty: "null",
@@ -18765,7 +18777,7 @@ var GROUP_TEMPLATES = [
18765
18777
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
18766
18778
  role: DeviceRole.AmbientLightSensor,
18767
18779
  outputCap: "ambient-light-sensor",
18768
- outputField: "lux",
18780
+ outputField: "illuminance",
18769
18781
  quantity: "illuminance",
18770
18782
  defaultAggregate: "mean",
18771
18783
  empty: "null",
@@ -18776,7 +18788,7 @@ var GROUP_TEMPLATES = [
18776
18788
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
18777
18789
  role: DeviceRole.PowerSensor,
18778
18790
  outputCap: "power-meter",
18779
- outputField: "watts",
18791
+ outputField: "power",
18780
18792
  quantity: "power",
18781
18793
  defaultAggregate: "sum",
18782
18794
  empty: "omit",
@@ -18787,7 +18799,7 @@ var GROUP_TEMPLATES = [
18787
18799
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
18788
18800
  role: DeviceRole.EnergySensor,
18789
18801
  outputCap: "power-meter",
18790
- outputField: "kwhTotal",
18802
+ outputField: "energy",
18791
18803
  quantity: "energy",
18792
18804
  defaultAggregate: "sum",
18793
18805
  empty: "omit",
@@ -18798,7 +18810,7 @@ var GROUP_TEMPLATES = [
18798
18810
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
18799
18811
  role: DeviceRole.BatterySensor,
18800
18812
  outputCap: "battery",
18801
- outputField: "percentage",
18813
+ outputField: "level",
18802
18814
  quantity: "percentage",
18803
18815
  defaultAggregate: "mean",
18804
18816
  empty: "null",
@@ -44253,6 +44265,43 @@ var NotificationActionSchema = object({
44253
44265
  */
44254
44266
  mode: _enum(["navigate", "background"]).optional()
44255
44267
  });
44268
+ /** A delivery parameter value: what a notifier declared it takes. */
44269
+ var DeliveryParamValueSchema = union([
44270
+ string(),
44271
+ number(),
44272
+ boolean()
44273
+ ]);
44274
+ /**
44275
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44276
+ * addresses a target of that kind may set it; a kind that declares nothing is
44277
+ * never handed one. The admin UI derives its control from this descriptor —
44278
+ * no editor knows a service by name.
44279
+ *
44280
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44281
+ * run on the addon cap path).
44282
+ */
44283
+ var DeliveryParamSchema = object({
44284
+ key: string().min(1),
44285
+ label: string(),
44286
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44287
+ labelKey: string().optional(),
44288
+ type: _enum([
44289
+ "enum",
44290
+ "number",
44291
+ "boolean",
44292
+ "string"
44293
+ ]),
44294
+ /** `enum` only: the closed set of accepted values. */
44295
+ options: array(object({
44296
+ value: string(),
44297
+ label: string()
44298
+ })).optional(),
44299
+ /** `number` only. */
44300
+ min: number().optional(),
44301
+ max: number().optional(),
44302
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44303
+ default: DeliveryParamValueSchema.optional()
44304
+ });
44256
44305
  /**
44257
44306
  * The canonical notification. `body` is the only hard field (Apprise model).
44258
44307
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44275,7 +44324,13 @@ var NotificationSchema = object({
44275
44324
  tag: string().optional(),
44276
44325
  deviceId: number().optional(),
44277
44326
  eventId: string().optional(),
44278
- metadata: record(string(), unknown()).optional()
44327
+ metadata: record(string(), unknown()).optional(),
44328
+ /**
44329
+ * Values for the parameters the target's kind DECLARES in
44330
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44331
+ * declaration by the sender; a notifier reads only the keys it declared.
44332
+ */
44333
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44279
44334
  });
44280
44335
  /** One declared native severity/priority level for a kind. */
44281
44336
  var TargetKindLevelSchema = object({
@@ -44381,6 +44436,11 @@ var TargetKindSchema = object({
44381
44436
  */
44382
44437
  destinationKeys: array(string()).optional(),
44383
44438
  supportsDiscovery: boolean(),
44439
+ /**
44440
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
44441
+ * Absent = none; the rule editor then offers nothing.
44442
+ */
44443
+ deliveryParams: array(DeliveryParamSchema).optional(),
44384
44444
  caps: TargetKindCapsSchema
44385
44445
  });
44386
44446
  /**
@@ -56551,7 +56611,9 @@ var ManifestShapeSchema = object({
56551
56611
  icon: string().optional()
56552
56612
  }).optional(),
56553
56613
  protected: boolean().optional(),
56554
- removable: boolean().optional()
56614
+ removable: boolean().optional(),
56615
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
56616
+ integrationSection: _enum(["system", "providers"]).optional()
56555
56617
  });
56556
56618
  var AddonProcessSchema = object({
56557
56619
  pid: number().optional(),
@@ -56916,9 +56978,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
56916
56978
  }), LogStreamEntrySchema, { kind: "subscription" });
56917
56979
  object({
56918
56980
  /** Carbon dioxide concentration in ppm. */
56919
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
56981
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
56920
56982
  /** Total volatile organic compounds in ppb. */
56921
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
56983
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
56922
56984
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
56923
56985
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
56924
56986
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -56931,7 +56993,7 @@ object({
56931
56993
  DeviceType.Sensor;
56932
56994
  object({
56933
56995
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
56934
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
56996
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
56935
56997
  precision: 0,
56936
56998
  label: "Illuminance"
56937
56999
  })),
@@ -57159,7 +57221,7 @@ var BatteryStatusSchema = object({
57159
57221
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57160
57222
  * declines to band a non-finite reading, which is the correct shape.
57161
57223
  */
57162
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57224
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57163
57225
  /**
57164
57226
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57165
57227
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57169,7 +57231,7 @@ var BatteryStatusSchema = object({
57169
57231
  * `'unknown'` is the absence of an answer: the provider has not read the
57170
57232
  * power fields yet, or the firmware reported neither. Before it existed,
57171
57233
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57172
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57234
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57173
57235
  * by going nullable. Consumers SKIP it (no charger state published, no
57174
57236
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57175
57237
  */
@@ -57193,7 +57255,7 @@ var BatteryStatusSchema = object({
57193
57255
  * that only report charge. A second reading on this cap, not a second
57194
57256
  * `numeric-sensor` on the same device.
57195
57257
  */
57196
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57258
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57197
57259
  /**
57198
57260
  * Ms epoch of the last time the device PROVED it was reachable — a
57199
57261
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57227,7 +57289,7 @@ var BatteryStatusSchema = object({
57227
57289
  /**
57228
57290
  * True when the source is a BINARY low-battery indicator (HA
57229
57291
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57230
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57292
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57231
57293
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57232
57294
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57233
57295
  */
@@ -57253,19 +57315,19 @@ object({
57253
57315
  DeviceType.Sensor;
57254
57316
  object({
57255
57317
  /** Current level as 0..100 inclusive. Firmware-reported. */
57256
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57318
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57257
57319
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57258
57320
  lastChangedAt: number()
57259
57321
  });
57260
57322
  DeviceType.Light, method(object({
57261
57323
  deviceId: number().int().nonnegative(),
57262
- percentage: number().min(0).max(100)
57324
+ level: number().min(0).max(100)
57263
57325
  }), _void(), {
57264
57326
  kind: "mutation",
57265
57327
  auth: "protected"
57266
57328
  }), object({
57267
57329
  deviceId: number(),
57268
- percentage: number().min(0).max(100),
57330
+ level: number().min(0).max(100),
57269
57331
  lastChangedAt: number()
57270
57332
  });
57271
57333
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -57766,11 +57828,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
57766
57828
  }),
57767
57829
  object({
57768
57830
  mode: literal("mired"),
57769
- mireds: number().int().min(50).max(1e3)
57831
+ colorTemperature: number().int().min(50).max(1e3)
57770
57832
  })
57771
57833
  ]);
57772
57834
  object({
57773
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
57835
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
57774
57836
  * the bulb's current state. */
57775
57837
  mode: _enum([
57776
57838
  "rgb",
@@ -57782,7 +57844,7 @@ object({
57782
57844
  /** Populated when `mode === 'hsv'`. */
57783
57845
  hsv: HsvTripletSchema.optional(),
57784
57846
  /** Populated when `mode === 'mired'`. */
57785
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
57847
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
57786
57848
  /** Ms epoch of the last operator-driven change. */
57787
57849
  lastChangedAt: number()
57788
57850
  });
@@ -57801,7 +57863,7 @@ DeviceType.Light, method(object({
57801
57863
  ]),
57802
57864
  rgb: RgbTripletSchema.optional(),
57803
57865
  hsv: HsvTripletSchema.optional(),
57804
- mireds: number().int().optional(),
57866
+ colorTemperature: number().int().optional(),
57805
57867
  lastChangedAt: number()
57806
57868
  });
57807
57869
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58227,11 +58289,11 @@ object({
58227
58289
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58228
58290
  availablePrograms: array(string()),
58229
58291
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58230
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58292
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58231
58293
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58232
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58294
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58233
58295
  /** Cycle completion 0..100, or null when not applicable. */
58234
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58296
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58235
58297
  /** True when the door is reported open; null when the door state is not known. */
58236
58298
  doorOpen: boolean().nullable(),
58237
58299
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -58849,7 +58911,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
58849
58911
  object({
58850
58912
  /** Active speed as 0..100 inclusive. Null when the device has no
58851
58913
  * speed surface (single-speed fan). */
58852
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58914
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58853
58915
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
58854
58916
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
58855
58917
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -58869,7 +58931,7 @@ object({
58869
58931
  });
58870
58932
  DeviceType.Fan, method(object({
58871
58933
  deviceId: number().int().nonnegative(),
58872
- percentage: number().min(0).max(100)
58934
+ speed: number().min(0).max(100)
58873
58935
  }), _void(), {
58874
58936
  kind: "mutation",
58875
58937
  auth: "protected"
@@ -59052,7 +59114,7 @@ DeviceType.Humidifier, method(object({
59052
59114
  });
59053
59115
  object({
59054
59116
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59055
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59117
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59056
59118
  precision: 0,
59057
59119
  label: "Humidity"
59058
59120
  })),
@@ -59495,7 +59557,7 @@ object({
59495
59557
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59496
59558
  /** 0..100 mowing-completion percentage of the current task, or null when no
59497
59559
  * task is active / progress is unavailable. */
59498
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59560
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59499
59561
  /** Current device/event code (dynamic — mostly status, sometimes an error),
59500
59562
  * or null when unknown. */
59501
59563
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -59985,10 +60047,10 @@ object({
59985
60047
  currentMedia: MediaInfoSchema.nullable(),
59986
60048
  /** Current playback position in ms. Null when not seekable or
59987
60049
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
59988
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60050
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
59989
60051
  /** Total duration of the current media in ms. Null when unknown
59990
60052
  * (live stream) or nothing is playing. */
59991
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60053
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
59992
60054
  /** Shuffle toggle. Null when no shuffle surface.
59993
60055
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
59994
60056
  shuffle: boolean().nullable(),
@@ -60015,7 +60077,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60015
60077
  auth: "protected"
60016
60078
  }), method(object({
60017
60079
  deviceId: number().int().nonnegative(),
60018
- positionMs: number().int().nonnegative()
60080
+ position: number().int().nonnegative()
60019
60081
  }), _void(), {
60020
60082
  kind: "mutation",
60021
60083
  auth: "protected"
@@ -60688,9 +60750,9 @@ var NetworkLinkStatusSchema = object({
60688
60750
  * one whose reading has not landed must not be drawn at 0 %. Consumers
60689
60751
  * SKIP a null rather than coerce it.
60690
60752
  */
60691
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60753
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60692
60754
  /** Raw received signal strength in dBm, when the firmware reports one. */
60693
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
60755
+ rssi: number().optional().meta(readingMeta("signal-level")),
60694
60756
  /** Network name of a wireless link, when the firmware reports it. */
60695
60757
  ssid: string().optional(),
60696
60758
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -61840,16 +61902,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
61840
61902
  auth: "admin"
61841
61903
  });
61842
61904
  object({
61843
- /** Instantaneous power draw in watts. */
61844
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
61905
+ /** Instantaneous power draw (watts). */
61906
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
61845
61907
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
61846
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
61847
- /** Voltage in volts. */
61848
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
61908
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
61909
+ /** Voltage (volts). */
61910
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
61849
61911
  /** Current in amperes. */
61850
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
61912
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
61851
61913
  /** Apparent power in volt-amperes. */
61852
- va: number().optional().meta(readingMeta("apparent-power")),
61914
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
61853
61915
  /** Power factor (0..1) if reported. */
61854
61916
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
61855
61917
  /** Ms epoch when the slice was last updated. */
@@ -61904,16 +61966,13 @@ object({
61904
61966
  location: string().nullable(),
61905
61967
  /** GPS coordinates when available. Null otherwise. */
61906
61968
  gps: GpsLocationSchema.nullable(),
61907
- /** Optional battery level of the tracking device (0..100). Null
61908
- * when not reported. */
61909
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61910
61969
  /** Ms epoch when the slice was last updated. */
61911
61970
  lastChangedAt: number()
61912
61971
  });
61913
61972
  DeviceType.Presence;
61914
61973
  object({
61915
61974
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
61916
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
61975
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
61917
61976
  /** Ms epoch when the slice was last updated. */
61918
61977
  lastFetchedAt: number()
61919
61978
  });
@@ -64916,7 +64975,7 @@ object({
64916
64975
  DeviceType.Sensor;
64917
64976
  object({
64918
64977
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
64919
- celsius: number().nullable().meta(readingMeta("temperature", {
64978
+ temperature: number().nullable().meta(readingMeta("temperature", {
64920
64979
  precision: 1,
64921
64980
  label: "Temperature"
64922
64981
  })),
@@ -65180,7 +65239,7 @@ object({
65180
65239
  /** Speed tokens the hardware accepts — drives the UI selector. */
65181
65240
  availableFanSpeeds: array(string()),
65182
65241
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65183
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65242
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65184
65243
  /** Current error code (0 / null = no error). */
65185
65244
  errorCode: number().nullable().meta(readingMeta("none")),
65186
65245
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76150,7 +76209,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76150
76209
  label: t("Full brightness", "Luminosità massima"),
76151
76210
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76152
76211
  icon: "sun",
76153
- args: { percentage: 100 }
76212
+ args: { level: 100 }
76154
76213
  },
76155
76214
  {
76156
76215
  id: "brightness.half",
@@ -76158,7 +76217,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76158
76217
  label: t("Half brightness", "Luminosità a metà"),
76159
76218
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76160
76219
  icon: "sun-dim",
76161
- args: { percentage: 50 }
76220
+ args: { level: 50 }
76162
76221
  },
76163
76222
  {
76164
76223
  id: "brightness.off",
@@ -76166,16 +76225,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76166
76225
  label: t("Brightness off", "Luminosità a zero"),
76167
76226
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76168
76227
  icon: "lightbulb-off",
76169
- args: { percentage: 0 }
76228
+ args: { level: 0 }
76170
76229
  },
76171
76230
  {
76172
76231
  id: "brightness.set",
76173
76232
  method: "setBrightness",
76174
76233
  label: t("Set brightness", "Imposta la luminosità"),
76175
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76234
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76176
76235
  icon: "sun-medium",
76177
76236
  openArgs: [{
76178
- key: "percentage",
76237
+ key: "level",
76179
76238
  label: PERCENT,
76180
76239
  offer: {
76181
76240
  kind: "number",
@@ -76189,13 +76248,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76189
76248
  ],
76190
76249
  state: [{
76191
76250
  kind: "numeric",
76192
- field: "percentage",
76251
+ field: "level",
76193
76252
  quantity: t("the brightness", "la luminosità"),
76194
76253
  label: t("Brightness", "Luminosità"),
76195
76254
  unit: "%",
76196
76255
  icon: "sun"
76197
76256
  }],
76198
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76257
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76199
76258
  },
76200
76259
  color: {
76201
76260
  scope: "device",
@@ -76209,7 +76268,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76209
76268
  icon: "sun",
76210
76269
  args: { color: {
76211
76270
  mode: "mired",
76212
- mireds: 370
76271
+ colorTemperature: 370
76213
76272
  } }
76214
76273
  },
76215
76274
  {
@@ -76220,7 +76279,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76220
76279
  icon: "snowflake",
76221
76280
  args: { color: {
76222
76281
  mode: "mired",
76223
- mireds: 200
76282
+ colorTemperature: 200
76224
76283
  } }
76225
76284
  },
76226
76285
  {
@@ -76834,7 +76893,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76834
76893
  label: t("Fan off", "Ventilatore spento"),
76835
76894
  phrase: t("Stop {device}", "Ferma {device}"),
76836
76895
  icon: "power-off",
76837
- args: { percentage: 0 }
76896
+ args: { speed: 0 }
76838
76897
  },
76839
76898
  {
76840
76899
  id: "fan.full",
@@ -76842,16 +76901,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76842
76901
  label: t("Fan full", "Ventilatore al massimo"),
76843
76902
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
76844
76903
  icon: "fan",
76845
- args: { percentage: 100 }
76904
+ args: { speed: 100 }
76846
76905
  },
76847
76906
  {
76848
76907
  id: "fan.speed",
76849
76908
  method: "setPercentage",
76850
76909
  label: t("Set speed", "Imposta la velocità"),
76851
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
76910
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
76852
76911
  icon: "fan",
76853
76912
  openArgs: [{
76854
- key: "percentage",
76913
+ key: "speed",
76855
76914
  label: t("Speed", "Velocità"),
76856
76915
  offer: {
76857
76916
  kind: "number",
@@ -76913,7 +76972,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76913
76972
  ],
76914
76973
  state: [{
76915
76974
  kind: "numeric",
76916
- field: "percentage",
76975
+ field: "speed",
76917
76976
  quantity: t("the speed", "la velocità"),
76918
76977
  label: t("Speed", "Velocità"),
76919
76978
  unit: "%",
@@ -77711,7 +77770,7 @@ var APPLIANCE_CAP_VOCABULARY = {
77711
77770
  },
77712
77771
  {
77713
77772
  kind: "numeric",
77714
- field: "progressPercent",
77773
+ field: "progress",
77715
77774
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
77716
77775
  label: t("Progress", "Avanzamento"),
77717
77776
  unit: "%",
@@ -78069,10 +78128,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78069
78128
  id: "media.seek",
78070
78129
  method: "seek",
78071
78130
  label: t("Seek", "Vai al punto"),
78072
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78131
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78073
78132
  icon: "fast-forward",
78074
78133
  openArgs: [{
78075
- key: "positionMs",
78134
+ key: "position",
78076
78135
  label: t("Position", "Posizione"),
78077
78136
  offer: {
78078
78137
  kind: "number",
@@ -79121,7 +79180,7 @@ var SENSOR_CAP_VOCABULARY = {
79121
79180
  state: [
79122
79181
  {
79123
79182
  kind: "numeric",
79124
- field: "co2Ppm",
79183
+ field: "co2",
79125
79184
  quantity: t("the CO₂", "la CO₂"),
79126
79185
  label: t("CO₂", "CO₂"),
79127
79186
  unit: "ppm",
@@ -79129,7 +79188,7 @@ var SENSOR_CAP_VOCABULARY = {
79129
79188
  },
79130
79189
  {
79131
79190
  kind: "numeric",
79132
- field: "vocPpb",
79191
+ field: "voc",
79133
79192
  quantity: t("the VOC level", "il livello di COV"),
79134
79193
  label: t("VOC", "COV"),
79135
79194
  unit: "ppb",
@@ -79165,7 +79224,7 @@ var SENSOR_CAP_VOCABULARY = {
79165
79224
  noun: t("Light level", "Luminosità ambiente"),
79166
79225
  state: [{
79167
79226
  kind: "numeric",
79168
- field: "lux",
79227
+ field: "illuminance",
79169
79228
  quantity: t("the light level", "la luminosità"),
79170
79229
  label: t("Illuminance", "Illuminamento"),
79171
79230
  unit: "lx",
@@ -79368,7 +79427,7 @@ var SENSOR_CAP_VOCABULARY = {
79368
79427
  noun: t("Humidity", "Umidità"),
79369
79428
  state: [{
79370
79429
  kind: "numeric",
79371
- field: "percent",
79430
+ field: "humidity",
79372
79431
  quantity: t("the humidity", "l’umidità"),
79373
79432
  label: t("Humidity", "Umidità"),
79374
79433
  unit: "%",
@@ -79416,7 +79475,7 @@ var SENSOR_CAP_VOCABULARY = {
79416
79475
  state: [
79417
79476
  {
79418
79477
  kind: "numeric",
79419
- field: "watts",
79478
+ field: "power",
79420
79479
  quantity: t("the power draw", "il consumo"),
79421
79480
  label: t("Power", "Potenza"),
79422
79481
  unit: "W",
@@ -79424,7 +79483,7 @@ var SENSOR_CAP_VOCABULARY = {
79424
79483
  },
79425
79484
  {
79426
79485
  kind: "numeric",
79427
- field: "kwhTotal",
79486
+ field: "energy",
79428
79487
  quantity: t("the energy used", "l’energia consumata"),
79429
79488
  label: t("Energy", "Energia"),
79430
79489
  unit: "kWh",
@@ -79432,7 +79491,7 @@ var SENSOR_CAP_VOCABULARY = {
79432
79491
  },
79433
79492
  {
79434
79493
  kind: "numeric",
79435
- field: "volts",
79494
+ field: "voltage",
79436
79495
  quantity: t("the voltage", "la tensione"),
79437
79496
  label: t("Voltage", "Tensione"),
79438
79497
  unit: "V",
@@ -79440,7 +79499,7 @@ var SENSOR_CAP_VOCABULARY = {
79440
79499
  },
79441
79500
  {
79442
79501
  kind: "numeric",
79443
- field: "amps",
79502
+ field: "current",
79444
79503
  quantity: t("the current", "la corrente"),
79445
79504
  label: t("Current", "Corrente"),
79446
79505
  unit: "A",
@@ -79457,13 +79516,6 @@ var SENSOR_CAP_VOCABULARY = {
79457
79516
  label: t("Where", "Posizione"),
79458
79517
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
79459
79518
  icon: "map-pin"
79460
- }, {
79461
- kind: "numeric",
79462
- field: "batteryPercent",
79463
- quantity: t("the phone battery", "la batteria del telefono"),
79464
- label: t("Battery", "Batteria"),
79465
- unit: "%",
79466
- icon: "battery"
79467
79519
  }]
79468
79520
  },
79469
79521
  "pressure-sensor": {
@@ -79471,7 +79523,7 @@ var SENSOR_CAP_VOCABULARY = {
79471
79523
  noun: t("Pressure", "Pressione"),
79472
79524
  state: [{
79473
79525
  kind: "numeric",
79474
- field: "hpa",
79526
+ field: "pressure",
79475
79527
  quantity: t("the pressure", "la pressione"),
79476
79528
  label: t("Pressure", "Pressione"),
79477
79529
  unit: "hPa",
@@ -79507,7 +79559,7 @@ var SENSOR_CAP_VOCABULARY = {
79507
79559
  noun: t("Temperature", "Temperatura"),
79508
79560
  state: [{
79509
79561
  kind: "numeric",
79510
- field: "celsius",
79562
+ field: "temperature",
79511
79563
  quantity: t("the temperature", "la temperatura"),
79512
79564
  label: t("Temperature", "Temperatura"),
79513
79565
  unit: "°C",
@@ -79578,7 +79630,7 @@ var SENSOR_CAP_VOCABULARY = {
79578
79630
  state: [
79579
79631
  {
79580
79632
  kind: "numeric",
79581
- field: "percentage",
79633
+ field: "level",
79582
79634
  quantity: t("the battery level", "il livello della batteria"),
79583
79635
  label: t("Battery", "Batteria"),
79584
79636
  unit: "%",
@@ -79620,7 +79672,7 @@ var SENSOR_CAP_VOCABULARY = {
79620
79672
  icon: "battery-charging"
79621
79673
  }
79622
79674
  ],
79623
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
79675
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
79624
79676
  extraEvents: [{
79625
79677
  category: EventCategory.DeviceAwake,
79626
79678
  label: t("Woke up", "Risvegliato"),
@@ -79638,7 +79690,7 @@ var SENSOR_CAP_VOCABULARY = {
79638
79690
  noun: t("Network link", "Collegamento di rete"),
79639
79691
  state: [{
79640
79692
  kind: "numeric",
79641
- field: "signalPercent",
79693
+ field: "signal",
79642
79694
  quantity: t("the signal strength", "l’intensità del segnale"),
79643
79695
  label: t("Signal", "Segnale"),
79644
79696
  unit: "%",
@@ -84059,7 +84111,7 @@ var AgentUIAddon = class extends BaseAddon {
84059
84111
  capability: adminUiCapability,
84060
84112
  provider: {
84061
84113
  getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
84062
- getVersion: async () => ({ version: "1.2.284" })
84114
+ getVersion: async () => ({ version: "1.2.286" })
84063
84115
  }
84064
84116
  }];
84065
84117
  }