@camstack/addon-post-analysis 1.2.639 → 1.2.641

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 (15) hide show
  1. package/dist/{clip-model-registry-B-Dv5y3Z.mjs → clip-model-registry-Cw7Iy7Qi.mjs} +315 -28
  2. package/dist/{clip-model-registry-DEcrrqRz.js → clip-model-registry-Qr0XipkX.js} +315 -28
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DRZLmZDb.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Cct0TMzC.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-_TUthUZh.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CuNXxDlT.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-B07ueo2X.mjs → hostInit-B9c2FowI.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +118 -23
  11. package/dist/pipeline-analytics/index.mjs +118 -23
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4TYbuPV.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Cc4lAtK3.mjs +0 -26
@@ -5671,7 +5671,7 @@ var ZodIssueCode = {
5671
5671
  var ZodFirstPartyTypeKind;
5672
5672
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5673
5673
  //#endregion
5674
- //#region ../types/dist/sleep-bykKrTgu.mjs
5674
+ //#region ../types/dist/sleep-0sD_LHLI.mjs
5675
5675
  /**
5676
5676
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5677
5677
  * window to float samples (D455).
@@ -9114,6 +9114,7 @@ var CAP_NAMES = Object.freeze([
9114
9114
  "login-method",
9115
9115
  "media-player",
9116
9116
  "mesh-network",
9117
+ "meter",
9117
9118
  "metrics-provider",
9118
9119
  "model-convert",
9119
9120
  "model-distributor",
@@ -10171,6 +10172,10 @@ Object.freeze({
10171
10172
  ]
10172
10173
  }
10173
10174
  ],
10175
+ "meter": [{
10176
+ "path": "value",
10177
+ "valueType": "number"
10178
+ }],
10174
10179
  "motion": [
10175
10180
  {
10176
10181
  "path": "detected",
@@ -10916,7 +10921,7 @@ Object.freeze({
10916
10921
  * can answer "may a rule actuate this?" without importing the schema barrel
10917
10922
  * (~144MB RSS per runner, D28).
10918
10923
  *
10919
- * Coverage: 93 device-scoped capabilities.
10924
+ * Coverage: 94 device-scoped capabilities.
10920
10925
  */
10921
10926
  var DEVICE_SCOPED_CAPS = new Set([
10922
10927
  "accessories",
@@ -10968,6 +10973,7 @@ var DEVICE_SCOPED_CAPS = new Set([
10968
10973
  "lawn-mower-control",
10969
10974
  "lock-control",
10970
10975
  "media-player",
10976
+ "meter",
10971
10977
  "motion",
10972
10978
  "motion-detection",
10973
10979
  "motion-trigger",
@@ -11057,7 +11063,7 @@ function sleep(ms) {
11057
11063
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
11058
11064
  }
11059
11065
  //#endregion
11060
- //#region ../types/dist/err-msg-BXKzRBwg.mjs
11066
+ //#region ../types/dist/err-msg-DIorGYeC.mjs
11061
11067
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
11062
11068
  DeviceType["Camera"] = "camera";
11063
11069
  DeviceType["Hub"] = "hub";
@@ -11151,8 +11157,14 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
11151
11157
  DeviceType["PetFeeder"] = "pet-feeder";
11152
11158
  /** Built-in dishwasher — program lifecycle, door / remote-start gates,
11153
11159
  * salt and rinse-aid levels. Installed with the `dishwasher` cap.
11154
- * Sources: native Bosch Home Connect, reusable by similar integrations. */
11160
+ * Sources: native Bosch Home Connect, reusable by similar integrations.
11161
+ * A plug-built dishwasher carries running-state and power instead. */
11155
11162
  DeviceType["Dishwasher"] = "dishwasher";
11163
+ /** Washing machine. A plug-built one is running while its power stays
11164
+ * above a threshold. No program cap — that surface is the dishwasher's. */
11165
+ DeviceType["Washer"] = "washer";
11166
+ /** Tumble dryer. Same plug-built running surface as {@link Washer}. */
11167
+ DeviceType["Dryer"] = "dryer";
11156
11168
  return DeviceType;
11157
11169
  }({});
11158
11170
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -11410,7 +11422,7 @@ function errMsg(err) {
11410
11422
  return String(err);
11411
11423
  }
11412
11424
  //#endregion
11413
- //#region ../types/dist/composition-OhpuespA.mjs
11425
+ //#region ../types/dist/composition-CpETZ4HL.mjs
11414
11426
  /**
11415
11427
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
11416
11428
  * canonical form sorts object keys alphabetically at every depth so two
@@ -12326,6 +12338,97 @@ function validateExpressionSource(src) {
12326
12338
  return null;
12327
12339
  }
12328
12340
  /**
12341
+ * One power reading becomes a washer, dryer or dishwasher (D944 helper).
12342
+ *
12343
+ * Standby of the control board is under 5 W; a motor or a heater is far
12344
+ * above that, so 5 W is the line. A door lock or a short pump spike is not
12345
+ * a cycle, so running starts only after 30 s above the line.
12346
+ *
12347
+ * A wash, dry or dishwasher pause (soak, heat-wait, heater off between
12348
+ * bursts) lasts several minutes. Ending the cycle on the first dip would
12349
+ * report "finished" in the middle of the program, so the stop dwell is
12350
+ * 10 minutes on every type. The number is stored per type so one machine
12351
+ * can move later without moving the others.
12352
+ */
12353
+ var APPLIANCE_TEMPLATE_ID = "appliance";
12354
+ var APPLIANCE_KINDS = [
12355
+ "washer",
12356
+ "dryer",
12357
+ "dishwasher"
12358
+ ];
12359
+ DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
12360
+ /**
12361
+ * Statistics and integrals over a history read (D944).
12362
+ *
12363
+ * Pure: the same points always give the same answer, so a restart recomputes
12364
+ * rather than trusting a buffer. A gauge mean is time-weighted (value × ms),
12365
+ * never the mean of the samples. A hole with no held value is not integrated
12366
+ * as zero. A truncated read is not published.
12367
+ */
12368
+ var STATISTIC_STATS = [
12369
+ "min",
12370
+ "max",
12371
+ "mean",
12372
+ "sum",
12373
+ "count",
12374
+ "change"
12375
+ ];
12376
+ /**
12377
+ * The range a statistics or integral helper asks history for (D944).
12378
+ *
12379
+ * Calendar edges are the hub's timezone, never UTC midnight: a day is 23, 24
12380
+ * or 25 hours across a DST change. A tier is eligible only when its retention
12381
+ * is strictly longer than the longest that range can be. Forever qualifies.
12382
+ * Equal to a tier's retention is a refusal, not a short answer.
12383
+ */
12384
+ var MINUTE_MS = 6e4;
12385
+ var HOUR_MS = 60 * MINUTE_MS;
12386
+ var DAY_MS = 24 * HOUR_MS;
12387
+ var ROLLING_SPANS = [
12388
+ "1h",
12389
+ "24h",
12390
+ "2d",
12391
+ "7d",
12392
+ "30d",
12393
+ "custom"
12394
+ ];
12395
+ var CALENDAR_PERIODS = [
12396
+ "today",
12397
+ "yesterday",
12398
+ "this-week",
12399
+ "this-month"
12400
+ ];
12401
+ var RESET_PERIODS = [
12402
+ "never",
12403
+ "daily",
12404
+ "weekly",
12405
+ "monthly"
12406
+ ];
12407
+ 5 * MINUTE_MS;
12408
+ 24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
12409
+ 7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
12410
+ var StatisticWindowSchema = discriminatedUnion("kind", [object({
12411
+ kind: literal("rolling"),
12412
+ span: _enum(ROLLING_SPANS),
12413
+ customMinutes: number().int().min(5).optional()
12414
+ }).check((payload) => {
12415
+ if (payload.value.span === "custom" && payload.value.customMinutes === void 0) payload.issues.push({
12416
+ code: "custom",
12417
+ message: "a custom range needs a duration in minutes",
12418
+ path: ["customMinutes"],
12419
+ input: payload.value
12420
+ });
12421
+ if (payload.value.span !== "custom" && payload.value.customMinutes !== void 0) payload.issues.push({
12422
+ code: "custom",
12423
+ message: "only a custom range carries a duration",
12424
+ path: ["customMinutes"],
12425
+ input: payload.value
12426
+ });
12427
+ }), object({
12428
+ kind: literal("calendar"),
12429
+ period: _enum(CALENDAR_PERIODS)
12430
+ })]);
12431
+ /**
12329
12432
  * A composition source identity: `(addonId, stableId)`, never a numeric device
12330
12433
  * id. Split out so helper schemas can name it without a cycle through
12331
12434
  * `composition.ts` (D659).
@@ -12381,14 +12484,37 @@ var HelperMemberSchema = object({
12381
12484
  cap: string().min(1),
12382
12485
  fieldPath: string().min(1)
12383
12486
  });
12384
- var HelperSpecSchema = discriminatedUnion("kind", [object({
12385
- kind: literal("group"),
12386
- templateId: GroupTemplateIdSchema,
12387
- aggregate: AggregateReducerSchema,
12388
- members: array(HelperMemberSchema).min(1).max(64),
12389
- /** Actuator groups only. Readings leave this unset. */
12390
- active: ActiveCriterionSchema.optional()
12391
- })]);
12487
+ var HelperSpecSchema = discriminatedUnion("kind", [
12488
+ object({
12489
+ kind: literal("group"),
12490
+ templateId: GroupTemplateIdSchema,
12491
+ aggregate: AggregateReducerSchema,
12492
+ members: array(HelperMemberSchema).min(1).max(64),
12493
+ /** Actuator groups only. Readings leave this unset. */
12494
+ active: ActiveCriterionSchema.optional()
12495
+ }),
12496
+ object({
12497
+ kind: literal("appliance"),
12498
+ templateId: literal(APPLIANCE_TEMPLATE_ID),
12499
+ appliance: _enum(APPLIANCE_KINDS),
12500
+ thresholdWatts: number().positive(),
12501
+ startDwellMs: number().int().nonnegative(),
12502
+ stopDwellMs: number().int().nonnegative(),
12503
+ member: HelperMemberSchema
12504
+ }),
12505
+ object({
12506
+ kind: literal("statistic"),
12507
+ stat: _enum(STATISTIC_STATS),
12508
+ window: StatisticWindowSchema,
12509
+ source: HelperMemberSchema
12510
+ }),
12511
+ object({
12512
+ kind: literal("integral"),
12513
+ reset: _enum(RESET_PERIODS),
12514
+ output: _enum(["energy", "meter"]),
12515
+ source: HelperMemberSchema
12516
+ })
12517
+ ]);
12392
12518
  /** A composed device's stableId is this prefix plus the block id. */
12393
12519
  var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
12394
12520
  /** Longest snippet a `code` source may carry (slice 4). */
@@ -12462,6 +12588,26 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
12462
12588
  "omit",
12463
12589
  "offline"
12464
12590
  ])
12591
+ }),
12592
+ object({
12593
+ kind: literal("series"),
12594
+ read: CompositionFieldReadSchema,
12595
+ /** `value` is the statistic or the integral. The others are the gap counts. */
12596
+ publish: _enum([
12597
+ "value",
12598
+ "included",
12599
+ "excluded",
12600
+ "total"
12601
+ ]),
12602
+ /**
12603
+ * What an unanswered `value` does. Counts ignore this. `offline` leaves the
12604
+ * device unseeded until history answers, so a restart cannot publish 0.
12605
+ */
12606
+ empty: _enum([
12607
+ "null",
12608
+ "omit",
12609
+ "offline"
12610
+ ])
12465
12611
  })
12466
12612
  ]);
12467
12613
  var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
@@ -19509,7 +19655,8 @@ var CompositionProblemSchema = object({
19509
19655
  "native-capability-replace",
19510
19656
  "mixed-quantity",
19511
19657
  "helper-mismatch",
19512
- "member-constraint"
19658
+ "member-constraint",
19659
+ "retention"
19513
19660
  ]),
19514
19661
  path: string(),
19515
19662
  message: string()
@@ -19749,7 +19896,7 @@ Object.freeze({
19749
19896
  * One catalog row per base reading a group helper can build (D944 §3).
19750
19897
  * Data, not a form default written into the block.
19751
19898
  */
19752
- var NOW = {
19899
+ var NOW$1 = {
19753
19900
  fieldPath: "lastFetchedAt",
19754
19901
  expr: "now"
19755
19902
  };
@@ -19795,7 +19942,7 @@ var GROUP_TEMPLATES = [
19795
19942
  quantity: "temperature",
19796
19943
  defaultAggregate: "mean",
19797
19944
  empty: "null",
19798
- companions: [NOW]
19945
+ companions: [NOW$1]
19799
19946
  }),
19800
19947
  numeric({
19801
19948
  id: "humidity",
@@ -19806,7 +19953,7 @@ var GROUP_TEMPLATES = [
19806
19953
  quantity: "humidity",
19807
19954
  defaultAggregate: "mean",
19808
19955
  empty: "null",
19809
- companions: [NOW]
19956
+ companions: [NOW$1]
19810
19957
  }),
19811
19958
  numeric({
19812
19959
  id: "pressure",
@@ -19817,7 +19964,7 @@ var GROUP_TEMPLATES = [
19817
19964
  quantity: "pressure",
19818
19965
  defaultAggregate: "mean",
19819
19966
  empty: "null",
19820
- companions: [NOW]
19967
+ companions: [NOW$1]
19821
19968
  }),
19822
19969
  numeric({
19823
19970
  id: "illuminance",
@@ -19828,7 +19975,7 @@ var GROUP_TEMPLATES = [
19828
19975
  quantity: "illuminance",
19829
19976
  defaultAggregate: "mean",
19830
19977
  empty: "null",
19831
- companions: [NOW]
19978
+ companions: [NOW$1]
19832
19979
  }),
19833
19980
  numeric({
19834
19981
  id: "power",
@@ -19839,7 +19986,7 @@ var GROUP_TEMPLATES = [
19839
19986
  quantity: "power",
19840
19987
  defaultAggregate: "sum",
19841
19988
  empty: "omit",
19842
- companions: [NOW]
19989
+ companions: [NOW$1]
19843
19990
  }),
19844
19991
  numeric({
19845
19992
  id: "energy",
@@ -19850,7 +19997,7 @@ var GROUP_TEMPLATES = [
19850
19997
  quantity: "energy",
19851
19998
  defaultAggregate: "sum",
19852
19999
  empty: "omit",
19853
- companions: [NOW]
20000
+ companions: [NOW$1]
19854
20001
  }),
19855
20002
  numeric({
19856
20003
  id: "battery",
@@ -19885,7 +20032,7 @@ var GROUP_TEMPLATES = [
19885
20032
  quantity: "device",
19886
20033
  defaultAggregate: "mean",
19887
20034
  empty: "null",
19888
- companions: [NOW]
20035
+ companions: [NOW$1]
19889
20036
  }),
19890
20037
  binary({
19891
20038
  id: "motion",
@@ -20014,6 +20161,7 @@ function actuator(input) {
20014
20161
  }
20015
20162
  new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
20016
20163
  DeviceFeature.LightColorRgb, DeviceFeature.LightColorHsv, DeviceFeature.LightColorMired;
20164
+ DeviceType.Camera;
20017
20165
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
20018
20166
  /**
20019
20167
  * What a composition may BUILD on a device type (G2, D676): the caps a new
@@ -64976,6 +65124,44 @@ var lockControlCapability = {
64976
65124
  volatileStateFields: ["lastChangedAt"]
64977
65125
  };
64978
65126
  /**
65127
+ * A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
65128
+ * so dashboards keep one series; every other instantaneous reading lands here.
65129
+ * `value` is the time integral in the source quantity's accumulated base
65130
+ * (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
65131
+ */
65132
+ var MeterStatusSchema = object({
65133
+ value: number().nullable().meta(readingMeta("device", { label: "Total" })),
65134
+ lastFetchedAt: number()
65135
+ });
65136
+ var meterCapability = {
65137
+ name: "meter",
65138
+ scope: "device",
65139
+ deviceNative: true,
65140
+ mode: "singleton",
65141
+ deviceTypes: [DeviceType.Sensor],
65142
+ methods: {},
65143
+ status: {
65144
+ schema: MeterStatusSchema,
65145
+ kind: "push"
65146
+ },
65147
+ runtimeState: MeterStatusSchema,
65148
+ /**
65149
+ * Runtime-state durability: **restored** — the total is a cache of the
65150
+ * history integral. A restart shows it only until the history pass
65151
+ * recomputes the open period; it is not an in-memory buffer.
65152
+ *
65153
+ * See `RuntimeStateDurability`. Enforced by
65154
+ * `scripts/check-runtime-state-durability.ts`.
65155
+ */
65156
+ durability: "restored",
65157
+ history: { fields: { value: {
65158
+ kind: "counter",
65159
+ deadband: .001,
65160
+ minIntervalMs: 6e4
65161
+ } } },
65162
+ volatileStateFields: ["lastFetchedAt"]
65163
+ };
65164
+ /**
64979
65165
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
64980
65166
  * Apple TV, Spotify, Roku, generic OTT receivers, …) on
64981
65167
  * `DeviceType.MediaPlayer`. Disjoint from the camera streaming
@@ -67562,7 +67748,12 @@ var powerMeterCapability = {
67562
67748
  scope: "device",
67563
67749
  deviceNative: true,
67564
67750
  mode: "singleton",
67565
- deviceTypes: [DeviceType.Sensor],
67751
+ deviceTypes: [
67752
+ DeviceType.Sensor,
67753
+ DeviceType.Washer,
67754
+ DeviceType.Dryer,
67755
+ DeviceType.Dishwasher
67756
+ ],
67566
67757
  methods: {},
67567
67758
  status: {
67568
67759
  schema: PowerMeterStatusSchema,
@@ -68300,6 +68491,8 @@ var runningCustomize = {
68300
68491
  stateField: "running"
68301
68492
  },
68302
68493
  deviceTypes: [
68494
+ DeviceType.Washer,
68495
+ DeviceType.Dryer,
68303
68496
  DeviceType.Dishwasher,
68304
68497
  DeviceType.Vacuum,
68305
68498
  DeviceType.LawnMower,
@@ -73053,7 +73246,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
73053
73246
  auth: "admin"
73054
73247
  });
73055
73248
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
73056
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Camera, DeviceType.Camera, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
73249
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
73057
73250
  String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
73058
73251
  DeviceRole.BinarySensor, DeviceRole.MotionSensor;
73059
73252
  new Set(CAP_NAMES);
@@ -73446,6 +73639,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
73446
73639
  lawnMowerControl: lawnMowerControlCapability,
73447
73640
  lockControl: lockControlCapability,
73448
73641
  mediaPlayer: mediaPlayerCapability,
73642
+ meter: meterCapability,
73449
73643
  motion: motionCapability,
73450
73644
  motionTrigger: motionTriggerCapability,
73451
73645
  motionZones: motionZonesCapability,
@@ -74222,7 +74416,7 @@ var DeclaredDevices = class {
74222
74416
  return removed;
74223
74417
  }
74224
74418
  };
74225
- DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
74419
+ DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer;
74226
74420
  new Set(Object.values(DeviceType));
74227
74421
  Object.freeze({
74228
74422
  "accessories.getStatus": {
@@ -78411,6 +78605,13 @@ Object.freeze({
78411
78605
  access: "create",
78412
78606
  role: "admin"
78413
78607
  },
78608
+ "meter.getStatus": {
78609
+ capName: "meter",
78610
+ capScope: "device",
78611
+ addonId: null,
78612
+ access: "view",
78613
+ role: "viewer"
78614
+ },
78414
78615
  "metricsProvider.collectSnapshot": {
78415
78616
  capName: "metrics-provider",
78416
78617
  capScope: "system",
@@ -86509,7 +86710,39 @@ var APPLIANCE_CAP_VOCABULARY = {
86509
86710
  phrase: t("When {device} finishes", "Quando {device} finisce"),
86510
86711
  icon: "square"
86511
86712
  }
86512
- }
86713
+ },
86714
+ overrides: { byType: {
86715
+ [DeviceType.Washer]: {
86716
+ state: { running: {
86717
+ whenTrue: t("When the washing machine starts", "Quando la lavatrice inizia"),
86718
+ whenFalse: t("When the washing machine has finished", "Quando la lavatrice ha finito")
86719
+ } },
86720
+ events: {
86721
+ onStarted: { phrase: t("When the washing machine starts", "Quando la lavatrice inizia") },
86722
+ onFinished: { phrase: t("When the washing machine has finished", "Quando la lavatrice ha finito") }
86723
+ }
86724
+ },
86725
+ [DeviceType.Dryer]: {
86726
+ state: { running: {
86727
+ whenTrue: t("When the dryer starts", "Quando l'asciugatrice inizia"),
86728
+ whenFalse: t("When the dryer has finished", "Quando l'asciugatrice ha finito")
86729
+ } },
86730
+ events: {
86731
+ onStarted: { phrase: t("When the dryer starts", "Quando l'asciugatrice inizia") },
86732
+ onFinished: { phrase: t("When the dryer has finished", "Quando l'asciugatrice ha finito") }
86733
+ }
86734
+ },
86735
+ [DeviceType.Dishwasher]: {
86736
+ state: { running: {
86737
+ whenTrue: t("When the dishwasher starts", "Quando la lavastoviglie inizia"),
86738
+ whenFalse: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito")
86739
+ } },
86740
+ events: {
86741
+ onStarted: { phrase: t("When the dishwasher starts", "Quando la lavastoviglie inizia") },
86742
+ onFinished: { phrase: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito") }
86743
+ }
86744
+ }
86745
+ } }
86513
86746
  },
86514
86747
  update: {
86515
86748
  scope: "device",
@@ -87337,6 +87570,17 @@ var SENSOR_CAP_VOCABULARY = {
87337
87570
  }],
87338
87571
  events: { onMotionChanged: { notOperatorFacing: "the `detected` state trigger phrases both edges, from the mirror that survives a dropped event (D49)" } }
87339
87572
  },
87573
+ meter: {
87574
+ scope: "device",
87575
+ noun: t("Meter", "Contatore"),
87576
+ state: [{
87577
+ kind: "numeric",
87578
+ field: "value",
87579
+ quantity: t("the total", "il totale"),
87580
+ label: t("Total", "Totale"),
87581
+ icon: "gauge"
87582
+ }]
87583
+ },
87340
87584
  "numeric-sensor": {
87341
87585
  scope: "device",
87342
87586
  noun: t("Sensor", "Sensore"),
@@ -87809,8 +88053,47 @@ function projectAction(cap, action) {
87809
88053
  };
87810
88054
  }
87811
88055
  Object.entries(CAP_VOCABULARY_BY_NAME).flatMap(([cap, entry]) => entry.scope === "device" ? (entry.actions ?? []).map((a) => projectAction(cap, a)) : []);
87812
- DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
88056
+ DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer;
87813
88057
  DeviceFeature.BatteryOperated;
88058
+ DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
88059
+ var HA_AS = "a power sensor (device_class power). Home Assistant has no laundry domain. running-state stays unexported until a null reading can be published as unavailable.";
88060
+ var HOMEKIT_REASON = "HomeKit has no laundry-appliance service. The export tab would pair an accessory with nothing on it: running-state is withheld until a null reading can be unavailable, and power is not a HomeKit service this export honours.";
88061
+ var ALEXA_REASON = "Alexa has no laundry category in this export, and neither power nor running has an Alexa interface.";
88062
+ var GOOGLE_REASON = "Google WASHER, DRYER and DISHWASHER require RunCycle. A power threshold is not that trait, and this export does not publish RunCycle.";
88063
+ var MATTER_REASON = "No Matter export is built. The closest device types are Laundry Washer (0x0073) and Laundry Dryer (0x0074); a power threshold is not the Laundry Washer Mode cluster.";
88064
+ function withheld(reason) {
88065
+ return {
88066
+ [DeviceType.Washer]: {
88067
+ exported: false,
88068
+ reason
88069
+ },
88070
+ [DeviceType.Dryer]: {
88071
+ exported: false,
88072
+ reason
88073
+ },
88074
+ [DeviceType.Dishwasher]: {
88075
+ exported: false,
88076
+ reason
88077
+ }
88078
+ };
88079
+ }
88080
+ function offered(received) {
88081
+ return {
88082
+ [DeviceType.Washer]: {
88083
+ exported: true,
88084
+ as: received
88085
+ },
88086
+ [DeviceType.Dryer]: {
88087
+ exported: true,
88088
+ as: received
88089
+ },
88090
+ [DeviceType.Dishwasher]: {
88091
+ exported: true,
88092
+ as: received
88093
+ }
88094
+ };
88095
+ }
88096
+ offered(HA_AS), withheld(HOMEKIT_REASON), withheld(ALEXA_REASON), withheld(GOOGLE_REASON), withheld(MATTER_REASON);
87814
88097
  Object.freeze({
87815
88098
  "accessories.getStatus": [{
87816
88099
  name: "deviceId",
@@ -88987,6 +89270,11 @@ Object.freeze({
88987
89270
  form: "single",
88988
89271
  optional: false
88989
89272
  }],
89273
+ "meter.getStatus": [{
89274
+ name: "deviceId",
89275
+ form: "single",
89276
+ optional: false
89277
+ }],
88990
89278
  "motion.getStatus": [{
88991
89279
  name: "deviceId",
88992
89280
  form: "single",
@@ -90691,7 +90979,6 @@ var BucketAccumulator = class {
90691
90979
  return n;
90692
90980
  }
90693
90981
  };
90694
- DeviceType.Camera;
90695
90982
  /**
90696
90983
  * A saved Customize assignment (D936). The schema is the type: callers use
90697
90984
  * `z.infer`, they do not restate the shape.
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-DEcrrqRz.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-Qr0XipkX.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Qi as BaseAddon, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, da as normalizeNodeId, gi as resolvePoolMemoryPolicy, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-B-Dv5y3Z.mjs";
1
+ import { Qi as BaseAddon, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, da as normalizeNodeId, gi as resolvePoolMemoryPolicy, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-Cw7Iy7Qi.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Cc4lAtK3.mjs";
3
+ import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CuNXxDlT.mjs";
4
4
  import { n as x, t as S } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs";
5
- import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4TYbuPV.mjs";
5
+ import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-_TUthUZh.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var w = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), D = (e) => {
8
8
  let t = E(e);
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.419",
21
+ version: "1.2.422",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.331",
36
+ version: "1.2.334",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",