@camstack/addon-export-alexa 1.2.162 → 1.2.163

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.
@@ -5466,7 +5466,7 @@ var ZodIssueCode = {
5466
5466
  var ZodFirstPartyTypeKind;
5467
5467
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5468
5468
  //#endregion
5469
- //#region ../types/dist/sleep-DJFUfKvA.mjs
5469
+ //#region ../types/dist/sleep-CUp20JkO.mjs
5470
5470
  /**
5471
5471
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5472
5472
  * window to float samples (D455).
@@ -8291,7 +8291,11 @@ var ContributionSectionSchema = object({
8291
8291
  literal(4)
8292
8292
  ]).optional(),
8293
8293
  tab: string().optional(),
8294
- location: _enum(["settings", "top-tab"]).optional(),
8294
+ location: _enum([
8295
+ "settings",
8296
+ "top-tab",
8297
+ "hero"
8298
+ ]).optional(),
8295
8299
  order: number().optional(),
8296
8300
  fields: array(any())
8297
8301
  });
@@ -13525,7 +13529,11 @@ var ConfigSectionWithValuesSchema = object({
13525
13529
  literal(4)
13526
13530
  ]).optional(),
13527
13531
  tab: string().optional(),
13528
- location: _enum(["settings", "top-tab"]).optional(),
13532
+ location: _enum([
13533
+ "settings",
13534
+ "top-tab",
13535
+ "hero"
13536
+ ]).optional(),
13529
13537
  order: number().optional(),
13530
13538
  fields: array(any())
13531
13539
  });
@@ -17299,6 +17307,52 @@ var TierStatusSchema = object({
17299
17307
  countedAt: number().nullable()
17300
17308
  });
17301
17309
  /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
17310
+ /**
17311
+ * Why a series is orphan. `device-gone`: its device is absent from the
17312
+ * successful device listings (the departure clock). `undeclared`: its `cap:`
17313
+ * key is declared by no capability any more (a field a cap removed).
17314
+ */
17315
+ var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
17316
+ /** Rows held per stored tier. */
17317
+ var TierRowsSchema = object({
17318
+ raw: number().int(),
17319
+ "5m": number().int(),
17320
+ "1h": number().int(),
17321
+ "1d": number().int()
17322
+ });
17323
+ var OrphanSeriesSchema = object({
17324
+ seriesId: number().int(),
17325
+ deviceId: number().int(),
17326
+ key: string(),
17327
+ scope: string(),
17328
+ /** The metric's display name; `null` when its metric row is gone too. */
17329
+ displayName: string().nullable(),
17330
+ reason: DeviceHistoryOrphanReasonSchema,
17331
+ /** `device-gone`: since when the device has been absent; `null` otherwise. */
17332
+ missingSince: number().nullable(),
17333
+ firstTs: number(),
17334
+ lastTs: number(),
17335
+ rows: TierRowsSchema
17336
+ });
17337
+ var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
17338
+ "not-found",
17339
+ "not-orphan",
17340
+ "failed"
17341
+ ]);
17342
+ var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
17343
+ seriesId: number().int(),
17344
+ ok: literal(true),
17345
+ deleted: TierRowsSchema
17346
+ }), object({
17347
+ seriesId: number().int(),
17348
+ ok: literal(false),
17349
+ reason: DeviceHistoryOrphanDeleteRefusalSchema
17350
+ })]);
17351
+ var OrphanListSchema = object({
17352
+ series: array(OrphanSeriesSchema).readonly(),
17353
+ /** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
17354
+ truncated: boolean()
17355
+ });
17302
17356
  var DeviceHistoryStatusSchema = object({
17303
17357
  startedAt: number(),
17304
17358
  /** The store is declared, series loaded and the first reconcile has answered. */
@@ -17396,7 +17450,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
17396
17450
  }), object({ enabled: boolean() }), {
17397
17451
  kind: "mutation",
17398
17452
  auth: "admin"
17399
- }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
17453
+ }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" }), method(object({}), OrphanListSchema, { auth: "admin" }), method(object({ seriesIds: array(number().int()).min(1).max(50) }), object({ results: array(OrphanDeleteEntrySchema).readonly() }), {
17454
+ kind: "mutation",
17455
+ auth: "admin"
17456
+ });
17400
17457
  var DeviceCaStatusSchema = discriminatedUnion("state", [
17401
17458
  object({ state: literal("absent") }),
17402
17459
  object({
@@ -54458,17 +54515,69 @@ object({
54458
54515
  });
54459
54516
  DeviceType.Sensor;
54460
54517
  /**
54461
- * Generic device-consumables capability — surfaces a device's
54462
- * maintenance items (vacuum filters/brushes, replaceable cartridges,
54463
- * descaling cycles, …) with their remaining life and an optional
54464
- * "Replaced" reset action. Device-agnostic: any provider that knows its
54465
- * device tracks consumables can register it; the cap declares no
54466
- * vocabulary of its own — the provider names each item verbatim.
54518
+ * Generic device-consumables capability — the ONE place a device reports what
54519
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
54520
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
54521
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
54522
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
54523
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
54524
+ * its device tracks consumables registers it; the provider names each item
54525
+ * verbatim and says which `kind` it is.
54526
+ *
54527
+ * The admin UI renders it as ONE collapsible section directly under the
54528
+ * device page's hero card (`placement: 'hero'`), for every device bound to
54529
+ * this cap — never drawn by a device type's hero card itself (D915).
54467
54530
  *
54468
54531
  * Like `childLayout`, the cap is INERT until a provider sets items: no
54469
54532
  * provider populates it by guessing (no HA inference). The UI renders a
54470
54533
  * "No consumables reported" placeholder when `items` is empty.
54471
54534
  */
54535
+ /**
54536
+ * What an item IS, which decides which direction is bad:
54537
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
54538
+ * - `supply` — something the device draws from (clean water, detergent,
54539
+ * salt, rinse aid); low or empty is bad.
54540
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
54541
+ * bad.
54542
+ * Absent = `wear`.
54543
+ */
54544
+ var ConsumableKindSchema = _enum([
54545
+ "wear",
54546
+ "supply",
54547
+ "waste"
54548
+ ]);
54549
+ /**
54550
+ * What an item LOOKS like, which decides how a client draws it — independent
54551
+ * of `kind`, which decides which direction is bad:
54552
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
54553
+ * remaining time and a reset.
54554
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
54555
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
54556
+ * a stepped level and "refill".
54557
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
54558
+ * that warns when full.
54559
+ * Absent = derived from the kind ({@link consumableFormOf}).
54560
+ */
54561
+ var ConsumableFormSchema = _enum([
54562
+ "part",
54563
+ "tank",
54564
+ "product",
54565
+ "bin"
54566
+ ]);
54567
+ /** The provider's own discrete verdict on an item. */
54568
+ var ConsumableStatusSchema = _enum([
54569
+ "ok",
54570
+ "low",
54571
+ "empty",
54572
+ "full",
54573
+ "replace"
54574
+ ]);
54575
+ _enum([
54576
+ "ok",
54577
+ "low",
54578
+ "empty",
54579
+ "full"
54580
+ ]);
54472
54581
  /** Units a remaining-life counter is reported in. Closed: the panel renders
54473
54582
  * each. */
54474
54583
  var ConsumableRemainingUnitSchema = _enum([
@@ -54488,10 +54597,14 @@ var ConsumablesStatusSchema = object({
54488
54597
  key: string().min(1),
54489
54598
  /** Display name. */
54490
54599
  label: string().min(1),
54491
- /** Remaining life % when known (0..100). */
54600
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
54492
54601
  level: number().min(0).max(100).nullable(),
54493
- /** Discrete state when known (binary mode). */
54494
- status: _enum(["ok", "replace"]).nullable(),
54602
+ /** The provider's discrete verdict when known (binary mode). */
54603
+ status: ConsumableStatusSchema.nullable(),
54604
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
54605
+ kind: ConsumableKindSchema.optional(),
54606
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
54607
+ form: ConsumableFormSchema.optional(),
54495
54608
  /** Ms epoch of the last replace, when known. */
54496
54609
  lastResetAt: number().nullable(),
54497
54610
  /** Whether `reset()` is meaningful for this item. */
@@ -54738,8 +54851,9 @@ object({
54738
54851
  status: DeviceStatusSchema
54739
54852
  });
54740
54853
  /**
54741
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54742
- * consumable levels (salt, rinse aid) and common program options.
54854
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
54855
+ * common program options. Salt and rinse aid are NOT here: they are items of
54856
+ * the device's `consumables` cap, like every other device's (D915).
54743
54857
  *
54744
54858
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54745
54859
  * by any integration that exposes the same program / option surface.
@@ -54787,11 +54901,6 @@ var DishwasherAvailabilitySchema = _enum([
54787
54901
  "offline",
54788
54902
  "description-missing"
54789
54903
  ]);
54790
- var DishwasherConsumableLevelSchema = _enum([
54791
- "ok",
54792
- "low",
54793
- "empty"
54794
- ]);
54795
54904
  object({
54796
54905
  availability: DishwasherAvailabilitySchema,
54797
54906
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -54824,8 +54933,6 @@ object({
54824
54933
  powerOn: boolean().nullable(),
54825
54934
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54826
54935
  powerState: string().nullable(),
54827
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
54828
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54829
54936
  /**
54830
54937
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54831
54938
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -61639,60 +61746,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61639
61746
  auth: "admin",
61640
61747
  access: "delete"
61641
61748
  });
61642
- /**
61643
- * Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
61644
- * cleaning lifecycle plus a return-to-base / locate surface and an
61645
- * optional fan-speed selector.
61646
- *
61647
- * State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
61648
- * `paused` / `returning` / `docked` / `error`. `batteryLevel`
61649
- * (0..100) is nullable — some vacuums don't report a battery
61650
- * percentage. `fanSpeed` is the current speed token (provider-verbatim,
61651
- * e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
61652
- * tokens the hardware accepts so the UI renders only supported choices.
61653
- *
61654
- * The `setFanSpeed` method takes the bare `speed` token — the provider
61655
- * validates it against the vacuum's own list. `locate` triggers the
61656
- * find-me chirp; `returnToBase` sends it home.
61657
- *
61658
- * Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
61659
- * `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
61660
- * 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
61661
- * SHOULD populate whichever tanks the hardware has — leave a field `null`
61662
- * only when the device has no such tank at all, and use a `TankStatus`
61663
- * with both inner fields `null` when the tank exists but its level is
61664
- * currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
61665
- * so the HA provider leaves all four `null`.
61666
- */
61667
- var VacuumStateSchema = _enum([
61668
- "idle",
61669
- "cleaning",
61670
- "paused",
61671
- "returning",
61672
- "docked",
61673
- "drying",
61674
- "error"
61675
- ]);
61676
- /**
61677
- * One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
61678
- * detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
61679
- * a discrete `status` (binary-style hardware), or both. Both `null` means the
61680
- * level is currently unknown; the OWNING field being `null` means the
61681
- * hardware has no such tank at all.
61682
- */
61683
- var TankStatusSchema = object({
61684
- /** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
61685
- level: number().min(0).max(100).nullable(),
61686
- /** Discrete state when the hardware is binary-mode; null otherwise. */
61687
- status: _enum([
61688
- "ok",
61689
- "low",
61690
- "full"
61691
- ]).nullable()
61692
- });
61693
61749
  object({
61694
61750
  /** Lifecycle state of the vacuum. */
61695
- state: VacuumStateSchema,
61751
+ state: _enum([
61752
+ "idle",
61753
+ "cleaning",
61754
+ "paused",
61755
+ "returning",
61756
+ "docked",
61757
+ "drying",
61758
+ "error"
61759
+ ]),
61696
61760
  /** 0..100 battery percentage. Null when the device has no battery
61697
61761
  * reading. */
61698
61762
  batteryLevel: number().min(0).max(100).nullable(),
@@ -61701,14 +61765,6 @@ object({
61701
61765
  fanSpeed: string().nullable(),
61702
61766
  /** Speed tokens the hardware accepts — drives the UI selector. */
61703
61767
  availableFanSpeeds: array(string()),
61704
- /** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
61705
- cleanWater: TankStatusSchema.nullable(),
61706
- /** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
61707
- dirtyWater: TankStatusSchema.nullable(),
61708
- /** Detergent tank. Null when the hardware has no detergent tank. */
61709
- detergent: TankStatusSchema.nullable(),
61710
- /** Dust bin. Null when the hardware has no dust bin. */
61711
- dustBin: TankStatusSchema.nullable(),
61712
61768
  /** 0..100 cleaning-completion percentage of the current task, or null. */
61713
61769
  progressPercent: number().min(0).max(100).nullable(),
61714
61770
  /** Current error code (0 / null = no error). */
@@ -64249,6 +64305,12 @@ Object.freeze({
64249
64305
  addonId: null,
64250
64306
  access: "create"
64251
64307
  },
64308
+ "deviceHistory.deleteOrphanSeries": {
64309
+ capName: "device-history",
64310
+ capScope: "system",
64311
+ addonId: null,
64312
+ access: "delete"
64313
+ },
64252
64314
  "deviceHistory.getDeviceEnabled": {
64253
64315
  capName: "device-history",
64254
64316
  capScope: "system",
@@ -64267,6 +64329,12 @@ Object.freeze({
64267
64329
  addonId: null,
64268
64330
  access: "view"
64269
64331
  },
64332
+ "deviceHistory.listOrphanSeries": {
64333
+ capName: "device-history",
64334
+ capScope: "system",
64335
+ addonId: null,
64336
+ access: "view"
64337
+ },
64270
64338
  "deviceHistory.listSeries": {
64271
64339
  capName: "device-history",
64272
64340
  capScope: "system",
@@ -74272,7 +74340,7 @@ var STATE_SUMMARY_VARS = [
74272
74340
  ([...RULE_TEXT], [...COMBINED_ALARM]),
74273
74341
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
74274
74342
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
74275
- ([...RULE_TEXT], [...CONSUMABLE]),
74343
+ ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
74276
74344
  ([...RULE_TEXT], [...TANK]),
74277
74345
  [...RULE_TEXT],
74278
74346
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
@@ -5437,7 +5437,7 @@ var ZodIssueCode = {
5437
5437
  var ZodFirstPartyTypeKind;
5438
5438
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5439
5439
  //#endregion
5440
- //#region ../types/dist/sleep-DJFUfKvA.mjs
5440
+ //#region ../types/dist/sleep-CUp20JkO.mjs
5441
5441
  /**
5442
5442
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5443
5443
  * window to float samples (D455).
@@ -8262,7 +8262,11 @@ var ContributionSectionSchema = object({
8262
8262
  literal(4)
8263
8263
  ]).optional(),
8264
8264
  tab: string().optional(),
8265
- location: _enum(["settings", "top-tab"]).optional(),
8265
+ location: _enum([
8266
+ "settings",
8267
+ "top-tab",
8268
+ "hero"
8269
+ ]).optional(),
8266
8270
  order: number().optional(),
8267
8271
  fields: array(any())
8268
8272
  });
@@ -13496,7 +13500,11 @@ var ConfigSectionWithValuesSchema = object({
13496
13500
  literal(4)
13497
13501
  ]).optional(),
13498
13502
  tab: string().optional(),
13499
- location: _enum(["settings", "top-tab"]).optional(),
13503
+ location: _enum([
13504
+ "settings",
13505
+ "top-tab",
13506
+ "hero"
13507
+ ]).optional(),
13500
13508
  order: number().optional(),
13501
13509
  fields: array(any())
13502
13510
  });
@@ -17270,6 +17278,52 @@ var TierStatusSchema = object({
17270
17278
  countedAt: number().nullable()
17271
17279
  });
17272
17280
  /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
17281
+ /**
17282
+ * Why a series is orphan. `device-gone`: its device is absent from the
17283
+ * successful device listings (the departure clock). `undeclared`: its `cap:`
17284
+ * key is declared by no capability any more (a field a cap removed).
17285
+ */
17286
+ var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
17287
+ /** Rows held per stored tier. */
17288
+ var TierRowsSchema = object({
17289
+ raw: number().int(),
17290
+ "5m": number().int(),
17291
+ "1h": number().int(),
17292
+ "1d": number().int()
17293
+ });
17294
+ var OrphanSeriesSchema = object({
17295
+ seriesId: number().int(),
17296
+ deviceId: number().int(),
17297
+ key: string(),
17298
+ scope: string(),
17299
+ /** The metric's display name; `null` when its metric row is gone too. */
17300
+ displayName: string().nullable(),
17301
+ reason: DeviceHistoryOrphanReasonSchema,
17302
+ /** `device-gone`: since when the device has been absent; `null` otherwise. */
17303
+ missingSince: number().nullable(),
17304
+ firstTs: number(),
17305
+ lastTs: number(),
17306
+ rows: TierRowsSchema
17307
+ });
17308
+ var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
17309
+ "not-found",
17310
+ "not-orphan",
17311
+ "failed"
17312
+ ]);
17313
+ var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
17314
+ seriesId: number().int(),
17315
+ ok: literal(true),
17316
+ deleted: TierRowsSchema
17317
+ }), object({
17318
+ seriesId: number().int(),
17319
+ ok: literal(false),
17320
+ reason: DeviceHistoryOrphanDeleteRefusalSchema
17321
+ })]);
17322
+ var OrphanListSchema = object({
17323
+ series: array(OrphanSeriesSchema).readonly(),
17324
+ /** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
17325
+ truncated: boolean()
17326
+ });
17273
17327
  var DeviceHistoryStatusSchema = object({
17274
17328
  startedAt: number(),
17275
17329
  /** The store is declared, series loaded and the first reconcile has answered. */
@@ -17367,7 +17421,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
17367
17421
  }), object({ enabled: boolean() }), {
17368
17422
  kind: "mutation",
17369
17423
  auth: "admin"
17370
- }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
17424
+ }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" }), method(object({}), OrphanListSchema, { auth: "admin" }), method(object({ seriesIds: array(number().int()).min(1).max(50) }), object({ results: array(OrphanDeleteEntrySchema).readonly() }), {
17425
+ kind: "mutation",
17426
+ auth: "admin"
17427
+ });
17371
17428
  var DeviceCaStatusSchema = discriminatedUnion("state", [
17372
17429
  object({ state: literal("absent") }),
17373
17430
  object({
@@ -54429,17 +54486,69 @@ object({
54429
54486
  });
54430
54487
  DeviceType.Sensor;
54431
54488
  /**
54432
- * Generic device-consumables capability — surfaces a device's
54433
- * maintenance items (vacuum filters/brushes, replaceable cartridges,
54434
- * descaling cycles, …) with their remaining life and an optional
54435
- * "Replaced" reset action. Device-agnostic: any provider that knows its
54436
- * device tracks consumables can register it; the cap declares no
54437
- * vocabulary of its own — the provider names each item verbatim.
54489
+ * Generic device-consumables capability — the ONE place a device reports what
54490
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
54491
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
54492
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
54493
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
54494
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
54495
+ * its device tracks consumables registers it; the provider names each item
54496
+ * verbatim and says which `kind` it is.
54497
+ *
54498
+ * The admin UI renders it as ONE collapsible section directly under the
54499
+ * device page's hero card (`placement: 'hero'`), for every device bound to
54500
+ * this cap — never drawn by a device type's hero card itself (D915).
54438
54501
  *
54439
54502
  * Like `childLayout`, the cap is INERT until a provider sets items: no
54440
54503
  * provider populates it by guessing (no HA inference). The UI renders a
54441
54504
  * "No consumables reported" placeholder when `items` is empty.
54442
54505
  */
54506
+ /**
54507
+ * What an item IS, which decides which direction is bad:
54508
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
54509
+ * - `supply` — something the device draws from (clean water, detergent,
54510
+ * salt, rinse aid); low or empty is bad.
54511
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
54512
+ * bad.
54513
+ * Absent = `wear`.
54514
+ */
54515
+ var ConsumableKindSchema = _enum([
54516
+ "wear",
54517
+ "supply",
54518
+ "waste"
54519
+ ]);
54520
+ /**
54521
+ * What an item LOOKS like, which decides how a client draws it — independent
54522
+ * of `kind`, which decides which direction is bad:
54523
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
54524
+ * remaining time and a reset.
54525
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
54526
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
54527
+ * a stepped level and "refill".
54528
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
54529
+ * that warns when full.
54530
+ * Absent = derived from the kind ({@link consumableFormOf}).
54531
+ */
54532
+ var ConsumableFormSchema = _enum([
54533
+ "part",
54534
+ "tank",
54535
+ "product",
54536
+ "bin"
54537
+ ]);
54538
+ /** The provider's own discrete verdict on an item. */
54539
+ var ConsumableStatusSchema = _enum([
54540
+ "ok",
54541
+ "low",
54542
+ "empty",
54543
+ "full",
54544
+ "replace"
54545
+ ]);
54546
+ _enum([
54547
+ "ok",
54548
+ "low",
54549
+ "empty",
54550
+ "full"
54551
+ ]);
54443
54552
  /** Units a remaining-life counter is reported in. Closed: the panel renders
54444
54553
  * each. */
54445
54554
  var ConsumableRemainingUnitSchema = _enum([
@@ -54459,10 +54568,14 @@ var ConsumablesStatusSchema = object({
54459
54568
  key: string().min(1),
54460
54569
  /** Display name. */
54461
54570
  label: string().min(1),
54462
- /** Remaining life % when known (0..100). */
54571
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
54463
54572
  level: number().min(0).max(100).nullable(),
54464
- /** Discrete state when known (binary mode). */
54465
- status: _enum(["ok", "replace"]).nullable(),
54573
+ /** The provider's discrete verdict when known (binary mode). */
54574
+ status: ConsumableStatusSchema.nullable(),
54575
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
54576
+ kind: ConsumableKindSchema.optional(),
54577
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
54578
+ form: ConsumableFormSchema.optional(),
54466
54579
  /** Ms epoch of the last replace, when known. */
54467
54580
  lastResetAt: number().nullable(),
54468
54581
  /** Whether `reset()` is meaningful for this item. */
@@ -54709,8 +54822,9 @@ object({
54709
54822
  status: DeviceStatusSchema
54710
54823
  });
54711
54824
  /**
54712
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54713
- * consumable levels (salt, rinse aid) and common program options.
54825
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
54826
+ * common program options. Salt and rinse aid are NOT here: they are items of
54827
+ * the device's `consumables` cap, like every other device's (D915).
54714
54828
  *
54715
54829
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54716
54830
  * by any integration that exposes the same program / option surface.
@@ -54758,11 +54872,6 @@ var DishwasherAvailabilitySchema = _enum([
54758
54872
  "offline",
54759
54873
  "description-missing"
54760
54874
  ]);
54761
- var DishwasherConsumableLevelSchema = _enum([
54762
- "ok",
54763
- "low",
54764
- "empty"
54765
- ]);
54766
54875
  object({
54767
54876
  availability: DishwasherAvailabilitySchema,
54768
54877
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -54795,8 +54904,6 @@ object({
54795
54904
  powerOn: boolean().nullable(),
54796
54905
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54797
54906
  powerState: string().nullable(),
54798
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
54799
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54800
54907
  /**
54801
54908
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54802
54909
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -61610,60 +61717,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61610
61717
  auth: "admin",
61611
61718
  access: "delete"
61612
61719
  });
61613
- /**
61614
- * Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
61615
- * cleaning lifecycle plus a return-to-base / locate surface and an
61616
- * optional fan-speed selector.
61617
- *
61618
- * State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
61619
- * `paused` / `returning` / `docked` / `error`. `batteryLevel`
61620
- * (0..100) is nullable — some vacuums don't report a battery
61621
- * percentage. `fanSpeed` is the current speed token (provider-verbatim,
61622
- * e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
61623
- * tokens the hardware accepts so the UI renders only supported choices.
61624
- *
61625
- * The `setFanSpeed` method takes the bare `speed` token — the provider
61626
- * validates it against the vacuum's own list. `locate` triggers the
61627
- * find-me chirp; `returnToBase` sends it home.
61628
- *
61629
- * Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
61630
- * `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
61631
- * 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
61632
- * SHOULD populate whichever tanks the hardware has — leave a field `null`
61633
- * only when the device has no such tank at all, and use a `TankStatus`
61634
- * with both inner fields `null` when the tank exists but its level is
61635
- * currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
61636
- * so the HA provider leaves all four `null`.
61637
- */
61638
- var VacuumStateSchema = _enum([
61639
- "idle",
61640
- "cleaning",
61641
- "paused",
61642
- "returning",
61643
- "docked",
61644
- "drying",
61645
- "error"
61646
- ]);
61647
- /**
61648
- * One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
61649
- * detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
61650
- * a discrete `status` (binary-style hardware), or both. Both `null` means the
61651
- * level is currently unknown; the OWNING field being `null` means the
61652
- * hardware has no such tank at all.
61653
- */
61654
- var TankStatusSchema = object({
61655
- /** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
61656
- level: number().min(0).max(100).nullable(),
61657
- /** Discrete state when the hardware is binary-mode; null otherwise. */
61658
- status: _enum([
61659
- "ok",
61660
- "low",
61661
- "full"
61662
- ]).nullable()
61663
- });
61664
61720
  object({
61665
61721
  /** Lifecycle state of the vacuum. */
61666
- state: VacuumStateSchema,
61722
+ state: _enum([
61723
+ "idle",
61724
+ "cleaning",
61725
+ "paused",
61726
+ "returning",
61727
+ "docked",
61728
+ "drying",
61729
+ "error"
61730
+ ]),
61667
61731
  /** 0..100 battery percentage. Null when the device has no battery
61668
61732
  * reading. */
61669
61733
  batteryLevel: number().min(0).max(100).nullable(),
@@ -61672,14 +61736,6 @@ object({
61672
61736
  fanSpeed: string().nullable(),
61673
61737
  /** Speed tokens the hardware accepts — drives the UI selector. */
61674
61738
  availableFanSpeeds: array(string()),
61675
- /** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
61676
- cleanWater: TankStatusSchema.nullable(),
61677
- /** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
61678
- dirtyWater: TankStatusSchema.nullable(),
61679
- /** Detergent tank. Null when the hardware has no detergent tank. */
61680
- detergent: TankStatusSchema.nullable(),
61681
- /** Dust bin. Null when the hardware has no dust bin. */
61682
- dustBin: TankStatusSchema.nullable(),
61683
61739
  /** 0..100 cleaning-completion percentage of the current task, or null. */
61684
61740
  progressPercent: number().min(0).max(100).nullable(),
61685
61741
  /** Current error code (0 / null = no error). */
@@ -64220,6 +64276,12 @@ Object.freeze({
64220
64276
  addonId: null,
64221
64277
  access: "create"
64222
64278
  },
64279
+ "deviceHistory.deleteOrphanSeries": {
64280
+ capName: "device-history",
64281
+ capScope: "system",
64282
+ addonId: null,
64283
+ access: "delete"
64284
+ },
64223
64285
  "deviceHistory.getDeviceEnabled": {
64224
64286
  capName: "device-history",
64225
64287
  capScope: "system",
@@ -64238,6 +64300,12 @@ Object.freeze({
64238
64300
  addonId: null,
64239
64301
  access: "view"
64240
64302
  },
64303
+ "deviceHistory.listOrphanSeries": {
64304
+ capName: "device-history",
64305
+ capScope: "system",
64306
+ addonId: null,
64307
+ access: "view"
64308
+ },
64241
64309
  "deviceHistory.listSeries": {
64242
64310
  capName: "device-history",
64243
64311
  capScope: "system",
@@ -74243,7 +74311,7 @@ var STATE_SUMMARY_VARS = [
74243
74311
  ([...RULE_TEXT], [...COMBINED_ALARM]),
74244
74312
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
74245
74313
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
74246
- ([...RULE_TEXT], [...CONSUMABLE]),
74314
+ ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
74247
74315
  ([...RULE_TEXT], [...TANK]),
74248
74316
  [...RULE_TEXT],
74249
74317
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-alexa",
3
- "version": "1.2.162",
3
+ "version": "1.2.163",
4
4
  "description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
5
5
  "keywords": [
6
6
  "camstack",