@camstack/addon-export-alexa 1.2.162 → 1.2.164

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({
@@ -50111,6 +50168,19 @@ var NodeInferenceDeviceSchema = object({
50111
50168
  /** Whether the node's live probe reports the device as usable right now. */
50112
50169
  available: boolean(),
50113
50170
  /**
50171
+ * Is the device on the node at all (D919)? `present` — the live probe
50172
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
50173
+ * its stored settings remain (unplugged, moved to another node): never
50174
+ * eligible, whatever its stored `enabled`, and forgettable with
50175
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
50176
+ * claimed (D315). Optional only for an orchestrator older than the field.
50177
+ */
50178
+ presence: _enum([
50179
+ "present",
50180
+ "absent",
50181
+ "unknown"
50182
+ ]).optional(),
50183
+ /**
50114
50184
  * Whether this device participates in dispatch. AUTO default (spec C2):
50115
50185
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
50116
50186
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -50336,7 +50406,13 @@ method(object({
50336
50406
  }), object({ success: literal(true) }), {
50337
50407
  kind: "mutation",
50338
50408
  auth: "admin"
50339
- }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
50409
+ }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
50410
+ agentNodeId: string(),
50411
+ deviceKey: string()
50412
+ }), object({ success: literal(true) }), {
50413
+ kind: "mutation",
50414
+ auth: "admin"
50415
+ }), method(object({ agentNodeId: string() }), object({
50340
50416
  success: literal(true),
50341
50417
  /** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
50342
50418
  effectiveModelId: string().nullable(),
@@ -54458,17 +54534,69 @@ object({
54458
54534
  });
54459
54535
  DeviceType.Sensor;
54460
54536
  /**
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.
54537
+ * Generic device-consumables capability — the ONE place a device reports what
54538
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
54539
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
54540
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
54541
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
54542
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
54543
+ * its device tracks consumables registers it; the provider names each item
54544
+ * verbatim and says which `kind` it is.
54545
+ *
54546
+ * The admin UI renders it as ONE collapsible section directly under the
54547
+ * device page's hero card (`placement: 'hero'`), for every device bound to
54548
+ * this cap — never drawn by a device type's hero card itself (D915).
54467
54549
  *
54468
54550
  * Like `childLayout`, the cap is INERT until a provider sets items: no
54469
54551
  * provider populates it by guessing (no HA inference). The UI renders a
54470
54552
  * "No consumables reported" placeholder when `items` is empty.
54471
54553
  */
54554
+ /**
54555
+ * What an item IS, which decides which direction is bad:
54556
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
54557
+ * - `supply` — something the device draws from (clean water, detergent,
54558
+ * salt, rinse aid); low or empty is bad.
54559
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
54560
+ * bad.
54561
+ * Absent = `wear`.
54562
+ */
54563
+ var ConsumableKindSchema = _enum([
54564
+ "wear",
54565
+ "supply",
54566
+ "waste"
54567
+ ]);
54568
+ /**
54569
+ * What an item LOOKS like, which decides how a client draws it — independent
54570
+ * of `kind`, which decides which direction is bad:
54571
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
54572
+ * remaining time and a reset.
54573
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
54574
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
54575
+ * a stepped level and "refill".
54576
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
54577
+ * that warns when full.
54578
+ * Absent = derived from the kind ({@link consumableFormOf}).
54579
+ */
54580
+ var ConsumableFormSchema = _enum([
54581
+ "part",
54582
+ "tank",
54583
+ "product",
54584
+ "bin"
54585
+ ]);
54586
+ /** The provider's own discrete verdict on an item. */
54587
+ var ConsumableStatusSchema = _enum([
54588
+ "ok",
54589
+ "low",
54590
+ "empty",
54591
+ "full",
54592
+ "replace"
54593
+ ]);
54594
+ _enum([
54595
+ "ok",
54596
+ "low",
54597
+ "empty",
54598
+ "full"
54599
+ ]);
54472
54600
  /** Units a remaining-life counter is reported in. Closed: the panel renders
54473
54601
  * each. */
54474
54602
  var ConsumableRemainingUnitSchema = _enum([
@@ -54488,10 +54616,14 @@ var ConsumablesStatusSchema = object({
54488
54616
  key: string().min(1),
54489
54617
  /** Display name. */
54490
54618
  label: string().min(1),
54491
- /** Remaining life % when known (0..100). */
54619
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
54492
54620
  level: number().min(0).max(100).nullable(),
54493
- /** Discrete state when known (binary mode). */
54494
- status: _enum(["ok", "replace"]).nullable(),
54621
+ /** The provider's discrete verdict when known (binary mode). */
54622
+ status: ConsumableStatusSchema.nullable(),
54623
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
54624
+ kind: ConsumableKindSchema.optional(),
54625
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
54626
+ form: ConsumableFormSchema.optional(),
54495
54627
  /** Ms epoch of the last replace, when known. */
54496
54628
  lastResetAt: number().nullable(),
54497
54629
  /** Whether `reset()` is meaningful for this item. */
@@ -54738,8 +54870,9 @@ object({
54738
54870
  status: DeviceStatusSchema
54739
54871
  });
54740
54872
  /**
54741
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54742
- * consumable levels (salt, rinse aid) and common program options.
54873
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
54874
+ * common program options. Salt and rinse aid are NOT here: they are items of
54875
+ * the device's `consumables` cap, like every other device's (D915).
54743
54876
  *
54744
54877
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54745
54878
  * by any integration that exposes the same program / option surface.
@@ -54787,11 +54920,6 @@ var DishwasherAvailabilitySchema = _enum([
54787
54920
  "offline",
54788
54921
  "description-missing"
54789
54922
  ]);
54790
- var DishwasherConsumableLevelSchema = _enum([
54791
- "ok",
54792
- "low",
54793
- "empty"
54794
- ]);
54795
54923
  object({
54796
54924
  availability: DishwasherAvailabilitySchema,
54797
54925
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -54824,8 +54952,6 @@ object({
54824
54952
  powerOn: boolean().nullable(),
54825
54953
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54826
54954
  powerState: string().nullable(),
54827
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
54828
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54829
54955
  /**
54830
54956
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54831
54957
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -56873,7 +56999,7 @@ DeviceType.Light, DeviceType.Siren, DeviceType.Switch, method(object({
56873
56999
  enabled: boolean()
56874
57000
  }), _void(), {
56875
57001
  kind: "mutation",
56876
- auth: "admin"
57002
+ auth: "protected"
56877
57003
  }), object({
56878
57004
  deviceId: number(),
56879
57005
  enabled: boolean(),
@@ -57363,6 +57489,13 @@ var TopologyNodeSchema = object({
57363
57489
  cpuModel: string().nullable(),
57364
57490
  cpuCores: number(),
57365
57491
  memoryMB: number(),
57492
+ /**
57493
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
57494
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
57495
+ * about whether its hardware is there (a Coral delegate stays installed
57496
+ * after the stick leaves, D919); the live device set is
57497
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
57498
+ */
57366
57499
  engines: array(string()).readonly(),
57367
57500
  isHub: boolean(),
57368
57501
  isOnline: boolean(),
@@ -58327,7 +58460,28 @@ var ResolvedInferenceConfigSchema = object({
58327
58460
  format: ModelFormatSchema,
58328
58461
  reason: string()
58329
58462
  });
58330
- method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema);
58463
+ /**
58464
+ * The answer of an accelerator rescan (D919): the node's device list after
58465
+ * the re-probe, what changed, and the evidence that decided the Coral answer
58466
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
58467
+ * bus, the installed-delegate fallback, or nothing).
58468
+ */
58469
+ var AcceleratorRescanSchema = object({
58470
+ devices: array(InferenceDeviceDescriptorSchema).readonly(),
58471
+ appeared: array(string()).readonly(),
58472
+ disappeared: array(string()).readonly(),
58473
+ usbBus: _enum(["observed", "unobservable"]),
58474
+ decidedBy: _enum([
58475
+ "usb-ids",
58476
+ "pci",
58477
+ "delegate-fallback",
58478
+ "none"
58479
+ ])
58480
+ });
58481
+ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
58482
+ kind: "mutation",
58483
+ auth: "admin"
58484
+ });
58331
58485
  object({
58332
58486
  /** Instantaneous power draw in watts. */
58333
58487
  watts: number().optional(),
@@ -61639,60 +61793,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61639
61793
  auth: "admin",
61640
61794
  access: "delete"
61641
61795
  });
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
61796
  object({
61694
61797
  /** Lifecycle state of the vacuum. */
61695
- state: VacuumStateSchema,
61798
+ state: _enum([
61799
+ "idle",
61800
+ "cleaning",
61801
+ "paused",
61802
+ "returning",
61803
+ "docked",
61804
+ "drying",
61805
+ "error"
61806
+ ]),
61696
61807
  /** 0..100 battery percentage. Null when the device has no battery
61697
61808
  * reading. */
61698
61809
  batteryLevel: number().min(0).max(100).nullable(),
@@ -61701,14 +61812,6 @@ object({
61701
61812
  fanSpeed: string().nullable(),
61702
61813
  /** Speed tokens the hardware accepts — drives the UI selector. */
61703
61814
  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
61815
  /** 0..100 cleaning-completion percentage of the current task, or null. */
61713
61816
  progressPercent: number().min(0).max(100).nullable(),
61714
61817
  /** Current error code (0 / null = no error). */
@@ -64249,6 +64352,12 @@ Object.freeze({
64249
64352
  addonId: null,
64250
64353
  access: "create"
64251
64354
  },
64355
+ "deviceHistory.deleteOrphanSeries": {
64356
+ capName: "device-history",
64357
+ capScope: "system",
64358
+ addonId: null,
64359
+ access: "delete"
64360
+ },
64252
64361
  "deviceHistory.getDeviceEnabled": {
64253
64362
  capName: "device-history",
64254
64363
  capScope: "system",
@@ -64267,6 +64376,12 @@ Object.freeze({
64267
64376
  addonId: null,
64268
64377
  access: "view"
64269
64378
  },
64379
+ "deviceHistory.listOrphanSeries": {
64380
+ capName: "device-history",
64381
+ capScope: "system",
64382
+ addonId: null,
64383
+ access: "view"
64384
+ },
64270
64385
  "deviceHistory.listSeries": {
64271
64386
  capName: "device-history",
64272
64387
  capScope: "system",
@@ -67891,6 +68006,12 @@ Object.freeze({
67891
68006
  addonId: null,
67892
68007
  access: "delete"
67893
68008
  },
68009
+ "pipelineOrchestrator.forgetInferenceDevice": {
68010
+ capName: "pipeline-orchestrator",
68011
+ capScope: "system",
68012
+ addonId: null,
68013
+ access: "delete"
68014
+ },
67894
68015
  "pipelineOrchestrator.getAgentLoad": {
67895
68016
  capName: "pipeline-orchestrator",
67896
68017
  capScope: "system",
@@ -68467,6 +68588,12 @@ Object.freeze({
68467
68588
  addonId: null,
68468
68589
  access: "view"
68469
68590
  },
68591
+ "platformProbe.rescanAccelerators": {
68592
+ capName: "platform-probe",
68593
+ capScope: "system",
68594
+ addonId: null,
68595
+ access: "create"
68596
+ },
68470
68597
  "platformProbe.resolveHwAccel": {
68471
68598
  capName: "platform-probe",
68472
68599
  capScope: "system",
@@ -74272,7 +74399,7 @@ var STATE_SUMMARY_VARS = [
74272
74399
  ([...RULE_TEXT], [...COMBINED_ALARM]),
74273
74400
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
74274
74401
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
74275
- ([...RULE_TEXT], [...CONSUMABLE]),
74402
+ ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
74276
74403
  ([...RULE_TEXT], [...TANK]),
74277
74404
  [...RULE_TEXT],
74278
74405
  ([...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({
@@ -50082,6 +50139,19 @@ var NodeInferenceDeviceSchema = object({
50082
50139
  /** Whether the node's live probe reports the device as usable right now. */
50083
50140
  available: boolean(),
50084
50141
  /**
50142
+ * Is the device on the node at all (D919)? `present` — the live probe
50143
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
50144
+ * its stored settings remain (unplugged, moved to another node): never
50145
+ * eligible, whatever its stored `enabled`, and forgettable with
50146
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
50147
+ * claimed (D315). Optional only for an orchestrator older than the field.
50148
+ */
50149
+ presence: _enum([
50150
+ "present",
50151
+ "absent",
50152
+ "unknown"
50153
+ ]).optional(),
50154
+ /**
50085
50155
  * Whether this device participates in dispatch. AUTO default (spec C2):
50086
50156
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
50087
50157
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -50307,7 +50377,13 @@ method(object({
50307
50377
  }), object({ success: literal(true) }), {
50308
50378
  kind: "mutation",
50309
50379
  auth: "admin"
50310
- }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
50380
+ }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
50381
+ agentNodeId: string(),
50382
+ deviceKey: string()
50383
+ }), object({ success: literal(true) }), {
50384
+ kind: "mutation",
50385
+ auth: "admin"
50386
+ }), method(object({ agentNodeId: string() }), object({
50311
50387
  success: literal(true),
50312
50388
  /** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
50313
50389
  effectiveModelId: string().nullable(),
@@ -54429,17 +54505,69 @@ object({
54429
54505
  });
54430
54506
  DeviceType.Sensor;
54431
54507
  /**
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.
54508
+ * Generic device-consumables capability — the ONE place a device reports what
54509
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
54510
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
54511
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
54512
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
54513
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
54514
+ * its device tracks consumables registers it; the provider names each item
54515
+ * verbatim and says which `kind` it is.
54516
+ *
54517
+ * The admin UI renders it as ONE collapsible section directly under the
54518
+ * device page's hero card (`placement: 'hero'`), for every device bound to
54519
+ * this cap — never drawn by a device type's hero card itself (D915).
54438
54520
  *
54439
54521
  * Like `childLayout`, the cap is INERT until a provider sets items: no
54440
54522
  * provider populates it by guessing (no HA inference). The UI renders a
54441
54523
  * "No consumables reported" placeholder when `items` is empty.
54442
54524
  */
54525
+ /**
54526
+ * What an item IS, which decides which direction is bad:
54527
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
54528
+ * - `supply` — something the device draws from (clean water, detergent,
54529
+ * salt, rinse aid); low or empty is bad.
54530
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
54531
+ * bad.
54532
+ * Absent = `wear`.
54533
+ */
54534
+ var ConsumableKindSchema = _enum([
54535
+ "wear",
54536
+ "supply",
54537
+ "waste"
54538
+ ]);
54539
+ /**
54540
+ * What an item LOOKS like, which decides how a client draws it — independent
54541
+ * of `kind`, which decides which direction is bad:
54542
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
54543
+ * remaining time and a reset.
54544
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
54545
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
54546
+ * a stepped level and "refill".
54547
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
54548
+ * that warns when full.
54549
+ * Absent = derived from the kind ({@link consumableFormOf}).
54550
+ */
54551
+ var ConsumableFormSchema = _enum([
54552
+ "part",
54553
+ "tank",
54554
+ "product",
54555
+ "bin"
54556
+ ]);
54557
+ /** The provider's own discrete verdict on an item. */
54558
+ var ConsumableStatusSchema = _enum([
54559
+ "ok",
54560
+ "low",
54561
+ "empty",
54562
+ "full",
54563
+ "replace"
54564
+ ]);
54565
+ _enum([
54566
+ "ok",
54567
+ "low",
54568
+ "empty",
54569
+ "full"
54570
+ ]);
54443
54571
  /** Units a remaining-life counter is reported in. Closed: the panel renders
54444
54572
  * each. */
54445
54573
  var ConsumableRemainingUnitSchema = _enum([
@@ -54459,10 +54587,14 @@ var ConsumablesStatusSchema = object({
54459
54587
  key: string().min(1),
54460
54588
  /** Display name. */
54461
54589
  label: string().min(1),
54462
- /** Remaining life % when known (0..100). */
54590
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
54463
54591
  level: number().min(0).max(100).nullable(),
54464
- /** Discrete state when known (binary mode). */
54465
- status: _enum(["ok", "replace"]).nullable(),
54592
+ /** The provider's discrete verdict when known (binary mode). */
54593
+ status: ConsumableStatusSchema.nullable(),
54594
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
54595
+ kind: ConsumableKindSchema.optional(),
54596
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
54597
+ form: ConsumableFormSchema.optional(),
54466
54598
  /** Ms epoch of the last replace, when known. */
54467
54599
  lastResetAt: number().nullable(),
54468
54600
  /** Whether `reset()` is meaningful for this item. */
@@ -54709,8 +54841,9 @@ object({
54709
54841
  status: DeviceStatusSchema
54710
54842
  });
54711
54843
  /**
54712
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54713
- * consumable levels (salt, rinse aid) and common program options.
54844
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
54845
+ * common program options. Salt and rinse aid are NOT here: they are items of
54846
+ * the device's `consumables` cap, like every other device's (D915).
54714
54847
  *
54715
54848
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54716
54849
  * by any integration that exposes the same program / option surface.
@@ -54758,11 +54891,6 @@ var DishwasherAvailabilitySchema = _enum([
54758
54891
  "offline",
54759
54892
  "description-missing"
54760
54893
  ]);
54761
- var DishwasherConsumableLevelSchema = _enum([
54762
- "ok",
54763
- "low",
54764
- "empty"
54765
- ]);
54766
54894
  object({
54767
54895
  availability: DishwasherAvailabilitySchema,
54768
54896
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -54795,8 +54923,6 @@ object({
54795
54923
  powerOn: boolean().nullable(),
54796
54924
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54797
54925
  powerState: string().nullable(),
54798
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
54799
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54800
54926
  /**
54801
54927
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54802
54928
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -56844,7 +56970,7 @@ DeviceType.Light, DeviceType.Siren, DeviceType.Switch, method(object({
56844
56970
  enabled: boolean()
56845
56971
  }), _void(), {
56846
56972
  kind: "mutation",
56847
- auth: "admin"
56973
+ auth: "protected"
56848
56974
  }), object({
56849
56975
  deviceId: number(),
56850
56976
  enabled: boolean(),
@@ -57334,6 +57460,13 @@ var TopologyNodeSchema = object({
57334
57460
  cpuModel: string().nullable(),
57335
57461
  cpuCores: number(),
57336
57462
  memoryMB: number(),
57463
+ /**
57464
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
57465
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
57466
+ * about whether its hardware is there (a Coral delegate stays installed
57467
+ * after the stick leaves, D919); the live device set is
57468
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
57469
+ */
57337
57470
  engines: array(string()).readonly(),
57338
57471
  isHub: boolean(),
57339
57472
  isOnline: boolean(),
@@ -58298,7 +58431,28 @@ var ResolvedInferenceConfigSchema = object({
58298
58431
  format: ModelFormatSchema,
58299
58432
  reason: string()
58300
58433
  });
58301
- method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema);
58434
+ /**
58435
+ * The answer of an accelerator rescan (D919): the node's device list after
58436
+ * the re-probe, what changed, and the evidence that decided the Coral answer
58437
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
58438
+ * bus, the installed-delegate fallback, or nothing).
58439
+ */
58440
+ var AcceleratorRescanSchema = object({
58441
+ devices: array(InferenceDeviceDescriptorSchema).readonly(),
58442
+ appeared: array(string()).readonly(),
58443
+ disappeared: array(string()).readonly(),
58444
+ usbBus: _enum(["observed", "unobservable"]),
58445
+ decidedBy: _enum([
58446
+ "usb-ids",
58447
+ "pci",
58448
+ "delegate-fallback",
58449
+ "none"
58450
+ ])
58451
+ });
58452
+ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
58453
+ kind: "mutation",
58454
+ auth: "admin"
58455
+ });
58302
58456
  object({
58303
58457
  /** Instantaneous power draw in watts. */
58304
58458
  watts: number().optional(),
@@ -61610,60 +61764,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61610
61764
  auth: "admin",
61611
61765
  access: "delete"
61612
61766
  });
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
61767
  object({
61665
61768
  /** Lifecycle state of the vacuum. */
61666
- state: VacuumStateSchema,
61769
+ state: _enum([
61770
+ "idle",
61771
+ "cleaning",
61772
+ "paused",
61773
+ "returning",
61774
+ "docked",
61775
+ "drying",
61776
+ "error"
61777
+ ]),
61667
61778
  /** 0..100 battery percentage. Null when the device has no battery
61668
61779
  * reading. */
61669
61780
  batteryLevel: number().min(0).max(100).nullable(),
@@ -61672,14 +61783,6 @@ object({
61672
61783
  fanSpeed: string().nullable(),
61673
61784
  /** Speed tokens the hardware accepts — drives the UI selector. */
61674
61785
  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
61786
  /** 0..100 cleaning-completion percentage of the current task, or null. */
61684
61787
  progressPercent: number().min(0).max(100).nullable(),
61685
61788
  /** Current error code (0 / null = no error). */
@@ -64220,6 +64323,12 @@ Object.freeze({
64220
64323
  addonId: null,
64221
64324
  access: "create"
64222
64325
  },
64326
+ "deviceHistory.deleteOrphanSeries": {
64327
+ capName: "device-history",
64328
+ capScope: "system",
64329
+ addonId: null,
64330
+ access: "delete"
64331
+ },
64223
64332
  "deviceHistory.getDeviceEnabled": {
64224
64333
  capName: "device-history",
64225
64334
  capScope: "system",
@@ -64238,6 +64347,12 @@ Object.freeze({
64238
64347
  addonId: null,
64239
64348
  access: "view"
64240
64349
  },
64350
+ "deviceHistory.listOrphanSeries": {
64351
+ capName: "device-history",
64352
+ capScope: "system",
64353
+ addonId: null,
64354
+ access: "view"
64355
+ },
64241
64356
  "deviceHistory.listSeries": {
64242
64357
  capName: "device-history",
64243
64358
  capScope: "system",
@@ -67862,6 +67977,12 @@ Object.freeze({
67862
67977
  addonId: null,
67863
67978
  access: "delete"
67864
67979
  },
67980
+ "pipelineOrchestrator.forgetInferenceDevice": {
67981
+ capName: "pipeline-orchestrator",
67982
+ capScope: "system",
67983
+ addonId: null,
67984
+ access: "delete"
67985
+ },
67865
67986
  "pipelineOrchestrator.getAgentLoad": {
67866
67987
  capName: "pipeline-orchestrator",
67867
67988
  capScope: "system",
@@ -68438,6 +68559,12 @@ Object.freeze({
68438
68559
  addonId: null,
68439
68560
  access: "view"
68440
68561
  },
68562
+ "platformProbe.rescanAccelerators": {
68563
+ capName: "platform-probe",
68564
+ capScope: "system",
68565
+ addonId: null,
68566
+ access: "create"
68567
+ },
68441
68568
  "platformProbe.resolveHwAccel": {
68442
68569
  capName: "platform-probe",
68443
68570
  capScope: "system",
@@ -74243,7 +74370,7 @@ var STATE_SUMMARY_VARS = [
74243
74370
  ([...RULE_TEXT], [...COMBINED_ALARM]),
74244
74371
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
74245
74372
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
74246
- ([...RULE_TEXT], [...CONSUMABLE]),
74373
+ ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
74247
74374
  ([...RULE_TEXT], [...TANK]),
74248
74375
  [...RULE_TEXT],
74249
74376
  ([...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.164",
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",