@camstack/addon-agent-ui 1.2.283 → 1.2.285

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
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { fileURLToPath } from "node:url";
3
- //#region ../types/dist/event-category-hdMR7CTW.mjs
3
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
4
4
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
5
5
  EventCategory["SystemBoot"] = "system.boot";
6
6
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -627,7 +627,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
627
627
  * (a track was promoted to a stationary-registry entry) or departs (the
628
628
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
629
629
  * the dedicated "Stationary" section — never the live event feed. Payload:
630
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
630
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
631
631
  */
632
632
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
633
633
  /**
@@ -5448,7 +5448,7 @@ var ZodIssueCode = {
5448
5448
  var ZodFirstPartyTypeKind;
5449
5449
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5450
5450
  //#endregion
5451
- //#region ../types/dist/sleep-BHjNez61.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-CZImLpOI.mjs
10787
10783
  /**
10788
10784
  * The ffmpeg build every CamStack node downloads, per platform and arch.
10789
10785
  *
@@ -15303,6 +15299,14 @@ var AutomationConditionLeafSchema = object({
15303
15299
  array(union([string(), number()]))
15304
15300
  ])
15305
15301
  });
15302
+ var AutomationConditionStationaryPresentSchema = object({
15303
+ kind: literal("stationary-present"),
15304
+ deviceId: number().int().nonnegative(),
15305
+ /** Class names; a macro class matches every raw class that maps to it. */
15306
+ classes: array(string().min(1)).min(1).optional(),
15307
+ /** The parked object must be in at least one of these zones. */
15308
+ zones: array(string().min(1)).min(1).optional()
15309
+ });
15306
15310
  /**
15307
15311
  * The expression leaf, declared as a plain object rather than an intersection
15308
15312
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -15336,7 +15340,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
15336
15340
  child: AutomationConditionSchema
15337
15341
  }),
15338
15342
  AutomationConditionLeafSchema,
15339
- AutomationConditionExpressionSchema
15343
+ AutomationConditionExpressionSchema,
15344
+ AutomationConditionStationaryPresentSchema
15340
15345
  ]));
15341
15346
  /**
15342
15347
  * What starts a run.
@@ -15390,6 +15395,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
15390
15395
  /** Best-so-far confidence the track must reach. */
15391
15396
  minScore: number().min(0).max(1).optional()
15392
15397
  }),
15398
+ object({
15399
+ kind: literal("stationary"),
15400
+ deviceIds: array(number().int().nonnegative()).min(1),
15401
+ /** Class names; a macro class matches like the detection trigger. */
15402
+ classes: array(string().min(1)).min(1).optional(),
15403
+ /** The parked object must be in at least one of these zones. */
15404
+ zones: array(string().min(1)).min(1).optional(),
15405
+ /** `appeared`: it became parked. `departed`: the registry retired it.
15406
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
15407
+ phase: _enum(["appeared", "departed"])
15408
+ }),
15393
15409
  object({
15394
15410
  kind: literal("interval"),
15395
15411
  minutes: number().int().min(1).max(1440)
@@ -15599,7 +15615,8 @@ var AutomationConditionTraceNodeSchema = object({
15599
15615
  "any",
15600
15616
  "not",
15601
15617
  "condition",
15602
- "expression"
15618
+ "expression",
15619
+ "stationary-present"
15603
15620
  ]),
15604
15621
  outcome: TraceNodeOutcomeSchema,
15605
15622
  reason: string(),
@@ -18392,7 +18409,7 @@ var CompositionEventPlanSchema = object({
18392
18409
  stateField: string(),
18393
18410
  fieldKey: string()
18394
18411
  });
18395
- /** 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`. */
18396
18413
  var CompositionProblemSchema = object({
18397
18414
  code: _enum([
18398
18415
  "reserved-variant",
@@ -18711,7 +18728,7 @@ var GROUP_TEMPLATES = [
18711
18728
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
18712
18729
  role: DeviceRole.TemperatureSensor,
18713
18730
  outputCap: "temperature-sensor",
18714
- outputField: "celsius",
18731
+ outputField: "temperature",
18715
18732
  quantity: "temperature",
18716
18733
  defaultAggregate: "mean",
18717
18734
  empty: "null",
@@ -18722,7 +18739,7 @@ var GROUP_TEMPLATES = [
18722
18739
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
18723
18740
  role: DeviceRole.HumiditySensor,
18724
18741
  outputCap: "humidity-sensor",
18725
- outputField: "percent",
18742
+ outputField: "humidity",
18726
18743
  quantity: "humidity",
18727
18744
  defaultAggregate: "mean",
18728
18745
  empty: "null",
@@ -18733,7 +18750,7 @@ var GROUP_TEMPLATES = [
18733
18750
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
18734
18751
  role: DeviceRole.PressureSensor,
18735
18752
  outputCap: "pressure-sensor",
18736
- outputField: "hpa",
18753
+ outputField: "pressure",
18737
18754
  quantity: "pressure",
18738
18755
  defaultAggregate: "mean",
18739
18756
  empty: "null",
@@ -18744,7 +18761,7 @@ var GROUP_TEMPLATES = [
18744
18761
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
18745
18762
  role: DeviceRole.AmbientLightSensor,
18746
18763
  outputCap: "ambient-light-sensor",
18747
- outputField: "lux",
18764
+ outputField: "illuminance",
18748
18765
  quantity: "illuminance",
18749
18766
  defaultAggregate: "mean",
18750
18767
  empty: "null",
@@ -18755,7 +18772,7 @@ var GROUP_TEMPLATES = [
18755
18772
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
18756
18773
  role: DeviceRole.PowerSensor,
18757
18774
  outputCap: "power-meter",
18758
- outputField: "watts",
18775
+ outputField: "power",
18759
18776
  quantity: "power",
18760
18777
  defaultAggregate: "sum",
18761
18778
  empty: "omit",
@@ -18766,7 +18783,7 @@ var GROUP_TEMPLATES = [
18766
18783
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
18767
18784
  role: DeviceRole.EnergySensor,
18768
18785
  outputCap: "power-meter",
18769
- outputField: "kwhTotal",
18786
+ outputField: "energy",
18770
18787
  quantity: "energy",
18771
18788
  defaultAggregate: "sum",
18772
18789
  empty: "omit",
@@ -18777,7 +18794,7 @@ var GROUP_TEMPLATES = [
18777
18794
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
18778
18795
  role: DeviceRole.BatterySensor,
18779
18796
  outputCap: "battery",
18780
- outputField: "percentage",
18797
+ outputField: "level",
18781
18798
  quantity: "percentage",
18782
18799
  defaultAggregate: "mean",
18783
18800
  empty: "null",
@@ -56895,9 +56912,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
56895
56912
  }), LogStreamEntrySchema, { kind: "subscription" });
56896
56913
  object({
56897
56914
  /** Carbon dioxide concentration in ppm. */
56898
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
56915
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
56899
56916
  /** Total volatile organic compounds in ppb. */
56900
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
56917
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
56901
56918
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
56902
56919
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
56903
56920
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -56910,7 +56927,7 @@ object({
56910
56927
  DeviceType.Sensor;
56911
56928
  object({
56912
56929
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
56913
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
56930
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
56914
56931
  precision: 0,
56915
56932
  label: "Illuminance"
56916
56933
  })),
@@ -57138,7 +57155,7 @@ var BatteryStatusSchema = object({
57138
57155
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57139
57156
  * declines to band a non-finite reading, which is the correct shape.
57140
57157
  */
57141
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57158
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57142
57159
  /**
57143
57160
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57144
57161
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57148,7 +57165,7 @@ var BatteryStatusSchema = object({
57148
57165
  * `'unknown'` is the absence of an answer: the provider has not read the
57149
57166
  * power fields yet, or the firmware reported neither. Before it existed,
57150
57167
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57151
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57168
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57152
57169
  * by going nullable. Consumers SKIP it (no charger state published, no
57153
57170
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57154
57171
  */
@@ -57172,7 +57189,7 @@ var BatteryStatusSchema = object({
57172
57189
  * that only report charge. A second reading on this cap, not a second
57173
57190
  * `numeric-sensor` on the same device.
57174
57191
  */
57175
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57192
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57176
57193
  /**
57177
57194
  * Ms epoch of the last time the device PROVED it was reachable — a
57178
57195
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57206,7 +57223,7 @@ var BatteryStatusSchema = object({
57206
57223
  /**
57207
57224
  * True when the source is a BINARY low-battery indicator (HA
57208
57225
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57209
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57226
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57210
57227
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57211
57228
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57212
57229
  */
@@ -57232,19 +57249,19 @@ object({
57232
57249
  DeviceType.Sensor;
57233
57250
  object({
57234
57251
  /** Current level as 0..100 inclusive. Firmware-reported. */
57235
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57252
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57236
57253
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57237
57254
  lastChangedAt: number()
57238
57255
  });
57239
57256
  DeviceType.Light, method(object({
57240
57257
  deviceId: number().int().nonnegative(),
57241
- percentage: number().min(0).max(100)
57258
+ level: number().min(0).max(100)
57242
57259
  }), _void(), {
57243
57260
  kind: "mutation",
57244
57261
  auth: "protected"
57245
57262
  }), object({
57246
57263
  deviceId: number(),
57247
- percentage: number().min(0).max(100),
57264
+ level: number().min(0).max(100),
57248
57265
  lastChangedAt: number()
57249
57266
  });
57250
57267
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -57745,11 +57762,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
57745
57762
  }),
57746
57763
  object({
57747
57764
  mode: literal("mired"),
57748
- mireds: number().int().min(50).max(1e3)
57765
+ colorTemperature: number().int().min(50).max(1e3)
57749
57766
  })
57750
57767
  ]);
57751
57768
  object({
57752
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
57769
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
57753
57770
  * the bulb's current state. */
57754
57771
  mode: _enum([
57755
57772
  "rgb",
@@ -57761,7 +57778,7 @@ object({
57761
57778
  /** Populated when `mode === 'hsv'`. */
57762
57779
  hsv: HsvTripletSchema.optional(),
57763
57780
  /** Populated when `mode === 'mired'`. */
57764
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
57781
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
57765
57782
  /** Ms epoch of the last operator-driven change. */
57766
57783
  lastChangedAt: number()
57767
57784
  });
@@ -57780,7 +57797,7 @@ DeviceType.Light, method(object({
57780
57797
  ]),
57781
57798
  rgb: RgbTripletSchema.optional(),
57782
57799
  hsv: HsvTripletSchema.optional(),
57783
- mireds: number().int().optional(),
57800
+ colorTemperature: number().int().optional(),
57784
57801
  lastChangedAt: number()
57785
57802
  });
57786
57803
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58206,11 +58223,11 @@ object({
58206
58223
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58207
58224
  availablePrograms: array(string()),
58208
58225
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58209
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58226
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58210
58227
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58211
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58228
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58212
58229
  /** Cycle completion 0..100, or null when not applicable. */
58213
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58230
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58214
58231
  /** True when the door is reported open; null when the door state is not known. */
58215
58232
  doorOpen: boolean().nullable(),
58216
58233
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -58828,7 +58845,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
58828
58845
  object({
58829
58846
  /** Active speed as 0..100 inclusive. Null when the device has no
58830
58847
  * speed surface (single-speed fan). */
58831
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58848
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58832
58849
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
58833
58850
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
58834
58851
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -58848,7 +58865,7 @@ object({
58848
58865
  });
58849
58866
  DeviceType.Fan, method(object({
58850
58867
  deviceId: number().int().nonnegative(),
58851
- percentage: number().min(0).max(100)
58868
+ speed: number().min(0).max(100)
58852
58869
  }), _void(), {
58853
58870
  kind: "mutation",
58854
58871
  auth: "protected"
@@ -59031,7 +59048,7 @@ DeviceType.Humidifier, method(object({
59031
59048
  });
59032
59049
  object({
59033
59050
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59034
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59051
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59035
59052
  precision: 0,
59036
59053
  label: "Humidity"
59037
59054
  })),
@@ -59474,7 +59491,7 @@ object({
59474
59491
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59475
59492
  /** 0..100 mowing-completion percentage of the current task, or null when no
59476
59493
  * task is active / progress is unavailable. */
59477
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59494
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59478
59495
  /** Current device/event code (dynamic — mostly status, sometimes an error),
59479
59496
  * or null when unknown. */
59480
59497
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -59964,10 +59981,10 @@ object({
59964
59981
  currentMedia: MediaInfoSchema.nullable(),
59965
59982
  /** Current playback position in ms. Null when not seekable or
59966
59983
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
59967
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
59984
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
59968
59985
  /** Total duration of the current media in ms. Null when unknown
59969
59986
  * (live stream) or nothing is playing. */
59970
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
59987
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
59971
59988
  /** Shuffle toggle. Null when no shuffle surface.
59972
59989
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
59973
59990
  shuffle: boolean().nullable(),
@@ -59994,7 +60011,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
59994
60011
  auth: "protected"
59995
60012
  }), method(object({
59996
60013
  deviceId: number().int().nonnegative(),
59997
- positionMs: number().int().nonnegative()
60014
+ position: number().int().nonnegative()
59998
60015
  }), _void(), {
59999
60016
  kind: "mutation",
60000
60017
  auth: "protected"
@@ -60667,9 +60684,9 @@ var NetworkLinkStatusSchema = object({
60667
60684
  * one whose reading has not landed must not be drawn at 0 %. Consumers
60668
60685
  * SKIP a null rather than coerce it.
60669
60686
  */
60670
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60687
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60671
60688
  /** Raw received signal strength in dBm, when the firmware reports one. */
60672
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
60689
+ rssi: number().optional().meta(readingMeta("signal-level")),
60673
60690
  /** Network name of a wireless link, when the firmware reports it. */
60674
60691
  ssid: string().optional(),
60675
60692
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -61819,16 +61836,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
61819
61836
  auth: "admin"
61820
61837
  });
61821
61838
  object({
61822
- /** Instantaneous power draw in watts. */
61823
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
61839
+ /** Instantaneous power draw (watts). */
61840
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
61824
61841
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
61825
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
61826
- /** Voltage in volts. */
61827
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
61842
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
61843
+ /** Voltage (volts). */
61844
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
61828
61845
  /** Current in amperes. */
61829
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
61846
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
61830
61847
  /** Apparent power in volt-amperes. */
61831
- va: number().optional().meta(readingMeta("apparent-power")),
61848
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
61832
61849
  /** Power factor (0..1) if reported. */
61833
61850
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
61834
61851
  /** Ms epoch when the slice was last updated. */
@@ -61883,16 +61900,13 @@ object({
61883
61900
  location: string().nullable(),
61884
61901
  /** GPS coordinates when available. Null otherwise. */
61885
61902
  gps: GpsLocationSchema.nullable(),
61886
- /** Optional battery level of the tracking device (0..100). Null
61887
- * when not reported. */
61888
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61889
61903
  /** Ms epoch when the slice was last updated. */
61890
61904
  lastChangedAt: number()
61891
61905
  });
61892
61906
  DeviceType.Presence;
61893
61907
  object({
61894
61908
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
61895
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
61909
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
61896
61910
  /** Ms epoch when the slice was last updated. */
61897
61911
  lastFetchedAt: number()
61898
61912
  });
@@ -64895,7 +64909,7 @@ object({
64895
64909
  DeviceType.Sensor;
64896
64910
  object({
64897
64911
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
64898
- celsius: number().nullable().meta(readingMeta("temperature", {
64912
+ temperature: number().nullable().meta(readingMeta("temperature", {
64899
64913
  precision: 1,
64900
64914
  label: "Temperature"
64901
64915
  })),
@@ -65159,7 +65173,7 @@ object({
65159
65173
  /** Speed tokens the hardware accepts — drives the UI selector. */
65160
65174
  availableFanSpeeds: array(string()),
65161
65175
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65162
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65176
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65163
65177
  /** Current error code (0 / null = no error). */
65164
65178
  errorCode: number().nullable().meta(readingMeta("none")),
65165
65179
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76129,7 +76143,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76129
76143
  label: t("Full brightness", "Luminosità massima"),
76130
76144
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76131
76145
  icon: "sun",
76132
- args: { percentage: 100 }
76146
+ args: { level: 100 }
76133
76147
  },
76134
76148
  {
76135
76149
  id: "brightness.half",
@@ -76137,7 +76151,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76137
76151
  label: t("Half brightness", "Luminosità a metà"),
76138
76152
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76139
76153
  icon: "sun-dim",
76140
- args: { percentage: 50 }
76154
+ args: { level: 50 }
76141
76155
  },
76142
76156
  {
76143
76157
  id: "brightness.off",
@@ -76145,16 +76159,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76145
76159
  label: t("Brightness off", "Luminosità a zero"),
76146
76160
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76147
76161
  icon: "lightbulb-off",
76148
- args: { percentage: 0 }
76162
+ args: { level: 0 }
76149
76163
  },
76150
76164
  {
76151
76165
  id: "brightness.set",
76152
76166
  method: "setBrightness",
76153
76167
  label: t("Set brightness", "Imposta la luminosità"),
76154
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76168
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76155
76169
  icon: "sun-medium",
76156
76170
  openArgs: [{
76157
- key: "percentage",
76171
+ key: "level",
76158
76172
  label: PERCENT,
76159
76173
  offer: {
76160
76174
  kind: "number",
@@ -76168,13 +76182,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76168
76182
  ],
76169
76183
  state: [{
76170
76184
  kind: "numeric",
76171
- field: "percentage",
76185
+ field: "level",
76172
76186
  quantity: t("the brightness", "la luminosità"),
76173
76187
  label: t("Brightness", "Luminosità"),
76174
76188
  unit: "%",
76175
76189
  icon: "sun"
76176
76190
  }],
76177
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76191
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76178
76192
  },
76179
76193
  color: {
76180
76194
  scope: "device",
@@ -76188,7 +76202,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76188
76202
  icon: "sun",
76189
76203
  args: { color: {
76190
76204
  mode: "mired",
76191
- mireds: 370
76205
+ colorTemperature: 370
76192
76206
  } }
76193
76207
  },
76194
76208
  {
@@ -76199,7 +76213,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76199
76213
  icon: "snowflake",
76200
76214
  args: { color: {
76201
76215
  mode: "mired",
76202
- mireds: 200
76216
+ colorTemperature: 200
76203
76217
  } }
76204
76218
  },
76205
76219
  {
@@ -76813,7 +76827,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76813
76827
  label: t("Fan off", "Ventilatore spento"),
76814
76828
  phrase: t("Stop {device}", "Ferma {device}"),
76815
76829
  icon: "power-off",
76816
- args: { percentage: 0 }
76830
+ args: { speed: 0 }
76817
76831
  },
76818
76832
  {
76819
76833
  id: "fan.full",
@@ -76821,16 +76835,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76821
76835
  label: t("Fan full", "Ventilatore al massimo"),
76822
76836
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
76823
76837
  icon: "fan",
76824
- args: { percentage: 100 }
76838
+ args: { speed: 100 }
76825
76839
  },
76826
76840
  {
76827
76841
  id: "fan.speed",
76828
76842
  method: "setPercentage",
76829
76843
  label: t("Set speed", "Imposta la velocità"),
76830
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
76844
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
76831
76845
  icon: "fan",
76832
76846
  openArgs: [{
76833
- key: "percentage",
76847
+ key: "speed",
76834
76848
  label: t("Speed", "Velocità"),
76835
76849
  offer: {
76836
76850
  kind: "number",
@@ -76892,7 +76906,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76892
76906
  ],
76893
76907
  state: [{
76894
76908
  kind: "numeric",
76895
- field: "percentage",
76909
+ field: "speed",
76896
76910
  quantity: t("the speed", "la velocità"),
76897
76911
  label: t("Speed", "Velocità"),
76898
76912
  unit: "%",
@@ -77690,7 +77704,7 @@ var APPLIANCE_CAP_VOCABULARY = {
77690
77704
  },
77691
77705
  {
77692
77706
  kind: "numeric",
77693
- field: "progressPercent",
77707
+ field: "progress",
77694
77708
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
77695
77709
  label: t("Progress", "Avanzamento"),
77696
77710
  unit: "%",
@@ -78048,10 +78062,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78048
78062
  id: "media.seek",
78049
78063
  method: "seek",
78050
78064
  label: t("Seek", "Vai al punto"),
78051
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78065
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78052
78066
  icon: "fast-forward",
78053
78067
  openArgs: [{
78054
- key: "positionMs",
78068
+ key: "position",
78055
78069
  label: t("Position", "Posizione"),
78056
78070
  offer: {
78057
78071
  kind: "number",
@@ -79100,7 +79114,7 @@ var SENSOR_CAP_VOCABULARY = {
79100
79114
  state: [
79101
79115
  {
79102
79116
  kind: "numeric",
79103
- field: "co2Ppm",
79117
+ field: "co2",
79104
79118
  quantity: t("the CO₂", "la CO₂"),
79105
79119
  label: t("CO₂", "CO₂"),
79106
79120
  unit: "ppm",
@@ -79108,7 +79122,7 @@ var SENSOR_CAP_VOCABULARY = {
79108
79122
  },
79109
79123
  {
79110
79124
  kind: "numeric",
79111
- field: "vocPpb",
79125
+ field: "voc",
79112
79126
  quantity: t("the VOC level", "il livello di COV"),
79113
79127
  label: t("VOC", "COV"),
79114
79128
  unit: "ppb",
@@ -79144,7 +79158,7 @@ var SENSOR_CAP_VOCABULARY = {
79144
79158
  noun: t("Light level", "Luminosità ambiente"),
79145
79159
  state: [{
79146
79160
  kind: "numeric",
79147
- field: "lux",
79161
+ field: "illuminance",
79148
79162
  quantity: t("the light level", "la luminosità"),
79149
79163
  label: t("Illuminance", "Illuminamento"),
79150
79164
  unit: "lx",
@@ -79347,7 +79361,7 @@ var SENSOR_CAP_VOCABULARY = {
79347
79361
  noun: t("Humidity", "Umidità"),
79348
79362
  state: [{
79349
79363
  kind: "numeric",
79350
- field: "percent",
79364
+ field: "humidity",
79351
79365
  quantity: t("the humidity", "l’umidità"),
79352
79366
  label: t("Humidity", "Umidità"),
79353
79367
  unit: "%",
@@ -79395,7 +79409,7 @@ var SENSOR_CAP_VOCABULARY = {
79395
79409
  state: [
79396
79410
  {
79397
79411
  kind: "numeric",
79398
- field: "watts",
79412
+ field: "power",
79399
79413
  quantity: t("the power draw", "il consumo"),
79400
79414
  label: t("Power", "Potenza"),
79401
79415
  unit: "W",
@@ -79403,7 +79417,7 @@ var SENSOR_CAP_VOCABULARY = {
79403
79417
  },
79404
79418
  {
79405
79419
  kind: "numeric",
79406
- field: "kwhTotal",
79420
+ field: "energy",
79407
79421
  quantity: t("the energy used", "l’energia consumata"),
79408
79422
  label: t("Energy", "Energia"),
79409
79423
  unit: "kWh",
@@ -79411,7 +79425,7 @@ var SENSOR_CAP_VOCABULARY = {
79411
79425
  },
79412
79426
  {
79413
79427
  kind: "numeric",
79414
- field: "volts",
79428
+ field: "voltage",
79415
79429
  quantity: t("the voltage", "la tensione"),
79416
79430
  label: t("Voltage", "Tensione"),
79417
79431
  unit: "V",
@@ -79419,7 +79433,7 @@ var SENSOR_CAP_VOCABULARY = {
79419
79433
  },
79420
79434
  {
79421
79435
  kind: "numeric",
79422
- field: "amps",
79436
+ field: "current",
79423
79437
  quantity: t("the current", "la corrente"),
79424
79438
  label: t("Current", "Corrente"),
79425
79439
  unit: "A",
@@ -79436,13 +79450,6 @@ var SENSOR_CAP_VOCABULARY = {
79436
79450
  label: t("Where", "Posizione"),
79437
79451
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
79438
79452
  icon: "map-pin"
79439
- }, {
79440
- kind: "numeric",
79441
- field: "batteryPercent",
79442
- quantity: t("the phone battery", "la batteria del telefono"),
79443
- label: t("Battery", "Batteria"),
79444
- unit: "%",
79445
- icon: "battery"
79446
79453
  }]
79447
79454
  },
79448
79455
  "pressure-sensor": {
@@ -79450,7 +79457,7 @@ var SENSOR_CAP_VOCABULARY = {
79450
79457
  noun: t("Pressure", "Pressione"),
79451
79458
  state: [{
79452
79459
  kind: "numeric",
79453
- field: "hpa",
79460
+ field: "pressure",
79454
79461
  quantity: t("the pressure", "la pressione"),
79455
79462
  label: t("Pressure", "Pressione"),
79456
79463
  unit: "hPa",
@@ -79486,7 +79493,7 @@ var SENSOR_CAP_VOCABULARY = {
79486
79493
  noun: t("Temperature", "Temperatura"),
79487
79494
  state: [{
79488
79495
  kind: "numeric",
79489
- field: "celsius",
79496
+ field: "temperature",
79490
79497
  quantity: t("the temperature", "la temperatura"),
79491
79498
  label: t("Temperature", "Temperatura"),
79492
79499
  unit: "°C",
@@ -79557,7 +79564,7 @@ var SENSOR_CAP_VOCABULARY = {
79557
79564
  state: [
79558
79565
  {
79559
79566
  kind: "numeric",
79560
- field: "percentage",
79567
+ field: "level",
79561
79568
  quantity: t("the battery level", "il livello della batteria"),
79562
79569
  label: t("Battery", "Batteria"),
79563
79570
  unit: "%",
@@ -79599,7 +79606,7 @@ var SENSOR_CAP_VOCABULARY = {
79599
79606
  icon: "battery-charging"
79600
79607
  }
79601
79608
  ],
79602
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
79609
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
79603
79610
  extraEvents: [{
79604
79611
  category: EventCategory.DeviceAwake,
79605
79612
  label: t("Woke up", "Risvegliato"),
@@ -79617,7 +79624,7 @@ var SENSOR_CAP_VOCABULARY = {
79617
79624
  noun: t("Network link", "Collegamento di rete"),
79618
79625
  state: [{
79619
79626
  kind: "numeric",
79620
- field: "signalPercent",
79627
+ field: "signal",
79621
79628
  quantity: t("the signal strength", "l’intensità del segnale"),
79622
79629
  label: t("Signal", "Segnale"),
79623
79630
  unit: "%",
@@ -84038,7 +84045,7 @@ var AgentUIAddon = class extends BaseAddon {
84038
84045
  capability: adminUiCapability,
84039
84046
  provider: {
84040
84047
  getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
84041
- getVersion: async () => ({ version: "1.2.283" })
84048
+ getVersion: async () => ({ version: "1.2.285" })
84042
84049
  }
84043
84050
  }];
84044
84051
  }