@camstack/addon-provider-rtsp 1.2.143 → 1.2.145

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 (3) hide show
  1. package/dist/addon.js +255 -120
  2. package/dist/addon.mjs +255 -120
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -5455,7 +5455,7 @@ var ZodIssueCode = {
5455
5455
  var ZodFirstPartyTypeKind;
5456
5456
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5457
5457
  //#endregion
5458
- //#region ../types/dist/sleep-DJFUfKvA.mjs
5458
+ //#region ../types/dist/sleep-CUp20JkO.mjs
5459
5459
  /**
5460
5460
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5461
5461
  * window to float samples (D455).
@@ -8347,7 +8347,11 @@ var ContributionSectionSchema = object({
8347
8347
  literal(4)
8348
8348
  ]).optional(),
8349
8349
  tab: string().optional(),
8350
- location: _enum(["settings", "top-tab"]).optional(),
8350
+ location: _enum([
8351
+ "settings",
8352
+ "top-tab",
8353
+ "hero"
8354
+ ]).optional(),
8351
8355
  order: number().optional(),
8352
8356
  fields: array(any())
8353
8357
  });
@@ -13401,7 +13405,11 @@ var ConfigSectionWithValuesSchema = object({
13401
13405
  literal(4)
13402
13406
  ]).optional(),
13403
13407
  tab: string().optional(),
13404
- location: _enum(["settings", "top-tab"]).optional(),
13408
+ location: _enum([
13409
+ "settings",
13410
+ "top-tab",
13411
+ "hero"
13412
+ ]).optional(),
13405
13413
  order: number().optional(),
13406
13414
  fields: array(any())
13407
13415
  });
@@ -17281,6 +17289,52 @@ var TierStatusSchema = object({
17281
17289
  countedAt: number().nullable()
17282
17290
  });
17283
17291
  /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
17292
+ /**
17293
+ * Why a series is orphan. `device-gone`: its device is absent from the
17294
+ * successful device listings (the departure clock). `undeclared`: its `cap:`
17295
+ * key is declared by no capability any more (a field a cap removed).
17296
+ */
17297
+ var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
17298
+ /** Rows held per stored tier. */
17299
+ var TierRowsSchema = object({
17300
+ raw: number().int(),
17301
+ "5m": number().int(),
17302
+ "1h": number().int(),
17303
+ "1d": number().int()
17304
+ });
17305
+ var OrphanSeriesSchema = object({
17306
+ seriesId: number().int(),
17307
+ deviceId: number().int(),
17308
+ key: string(),
17309
+ scope: string(),
17310
+ /** The metric's display name; `null` when its metric row is gone too. */
17311
+ displayName: string().nullable(),
17312
+ reason: DeviceHistoryOrphanReasonSchema,
17313
+ /** `device-gone`: since when the device has been absent; `null` otherwise. */
17314
+ missingSince: number().nullable(),
17315
+ firstTs: number(),
17316
+ lastTs: number(),
17317
+ rows: TierRowsSchema
17318
+ });
17319
+ var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
17320
+ "not-found",
17321
+ "not-orphan",
17322
+ "failed"
17323
+ ]);
17324
+ var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
17325
+ seriesId: number().int(),
17326
+ ok: literal(true),
17327
+ deleted: TierRowsSchema
17328
+ }), object({
17329
+ seriesId: number().int(),
17330
+ ok: literal(false),
17331
+ reason: DeviceHistoryOrphanDeleteRefusalSchema
17332
+ })]);
17333
+ var OrphanListSchema = object({
17334
+ series: array(OrphanSeriesSchema).readonly(),
17335
+ /** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
17336
+ truncated: boolean()
17337
+ });
17284
17338
  var DeviceHistoryStatusSchema = object({
17285
17339
  startedAt: number(),
17286
17340
  /** The store is declared, series loaded and the first reconcile has answered. */
@@ -17378,7 +17432,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
17378
17432
  }), object({ enabled: boolean() }), {
17379
17433
  kind: "mutation",
17380
17434
  auth: "admin"
17381
- }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
17435
+ }), 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() }), {
17436
+ kind: "mutation",
17437
+ auth: "admin"
17438
+ });
17382
17439
  var DeviceCaStatusSchema = discriminatedUnion("state", [
17383
17440
  object({ state: literal("absent") }),
17384
17441
  object({
@@ -50332,6 +50389,19 @@ var NodeInferenceDeviceSchema = object({
50332
50389
  /** Whether the node's live probe reports the device as usable right now. */
50333
50390
  available: boolean(),
50334
50391
  /**
50392
+ * Is the device on the node at all (D919)? `present` — the live probe
50393
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
50394
+ * its stored settings remain (unplugged, moved to another node): never
50395
+ * eligible, whatever its stored `enabled`, and forgettable with
50396
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
50397
+ * claimed (D315). Optional only for an orchestrator older than the field.
50398
+ */
50399
+ presence: _enum([
50400
+ "present",
50401
+ "absent",
50402
+ "unknown"
50403
+ ]).optional(),
50404
+ /**
50335
50405
  * Whether this device participates in dispatch. AUTO default (spec C2):
50336
50406
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
50337
50407
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -50557,7 +50627,13 @@ method(object({
50557
50627
  }), object({ success: literal(true) }), {
50558
50628
  kind: "mutation",
50559
50629
  auth: "admin"
50560
- }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
50630
+ }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
50631
+ agentNodeId: string(),
50632
+ deviceKey: string()
50633
+ }), object({ success: literal(true) }), {
50634
+ kind: "mutation",
50635
+ auth: "admin"
50636
+ }), method(object({ agentNodeId: string() }), object({
50561
50637
  success: literal(true),
50562
50638
  /** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
50563
50639
  effectiveModelId: string().nullable(),
@@ -55333,17 +55409,69 @@ var connectivityCapability = {
55333
55409
  volatileStateFields: ["lastChangedAt"]
55334
55410
  };
55335
55411
  /**
55336
- * Generic device-consumables capability — surfaces a device's
55337
- * maintenance items (vacuum filters/brushes, replaceable cartridges,
55338
- * descaling cycles, …) with their remaining life and an optional
55339
- * "Replaced" reset action. Device-agnostic: any provider that knows its
55340
- * device tracks consumables can register it; the cap declares no
55341
- * vocabulary of its own — the provider names each item verbatim.
55412
+ * Generic device-consumables capability — the ONE place a device reports what
55413
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
55414
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
55415
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
55416
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
55417
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
55418
+ * its device tracks consumables registers it; the provider names each item
55419
+ * verbatim and says which `kind` it is.
55420
+ *
55421
+ * The admin UI renders it as ONE collapsible section directly under the
55422
+ * device page's hero card (`placement: 'hero'`), for every device bound to
55423
+ * this cap — never drawn by a device type's hero card itself (D915).
55342
55424
  *
55343
55425
  * Like `childLayout`, the cap is INERT until a provider sets items: no
55344
55426
  * provider populates it by guessing (no HA inference). The UI renders a
55345
55427
  * "No consumables reported" placeholder when `items` is empty.
55346
55428
  */
55429
+ /**
55430
+ * What an item IS, which decides which direction is bad:
55431
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
55432
+ * - `supply` — something the device draws from (clean water, detergent,
55433
+ * salt, rinse aid); low or empty is bad.
55434
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
55435
+ * bad.
55436
+ * Absent = `wear`.
55437
+ */
55438
+ var ConsumableKindSchema = _enum([
55439
+ "wear",
55440
+ "supply",
55441
+ "waste"
55442
+ ]);
55443
+ /**
55444
+ * What an item LOOKS like, which decides how a client draws it — independent
55445
+ * of `kind`, which decides which direction is bad:
55446
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
55447
+ * remaining time and a reset.
55448
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
55449
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
55450
+ * a stepped level and "refill".
55451
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
55452
+ * that warns when full.
55453
+ * Absent = derived from the kind ({@link consumableFormOf}).
55454
+ */
55455
+ var ConsumableFormSchema = _enum([
55456
+ "part",
55457
+ "tank",
55458
+ "product",
55459
+ "bin"
55460
+ ]);
55461
+ /** The provider's own discrete verdict on an item. */
55462
+ var ConsumableStatusSchema = _enum([
55463
+ "ok",
55464
+ "low",
55465
+ "empty",
55466
+ "full",
55467
+ "replace"
55468
+ ]);
55469
+ _enum([
55470
+ "ok",
55471
+ "low",
55472
+ "empty",
55473
+ "full"
55474
+ ]);
55347
55475
  /** Units a remaining-life counter is reported in. Closed: the panel renders
55348
55476
  * each. */
55349
55477
  var ConsumableRemainingUnitSchema = _enum([
@@ -55358,18 +55486,23 @@ var ConsumableRemainingSchema = object({
55358
55486
  unit: ConsumableRemainingUnitSchema
55359
55487
  });
55360
55488
  /** A single consumable item. Either a continuous `level` (remaining
55361
- * life %) or a discrete `status` may be known — both may be null when a
55362
- * provider only knows the item exists. `level` and `status` are not
55363
- * mutually exclusive; a provider may report both. */
55489
+ * life %, or fill % for a `supply` / `waste` item) or a discrete `status`
55490
+ * may be known — both may be null when a provider only knows the item
55491
+ * exists. `level` and `status` are not mutually exclusive; a provider may
55492
+ * report both. */
55364
55493
  var ConsumableItemSchema = object({
55365
55494
  /** Stable id, e.g. 'main-brush'. */
55366
55495
  key: string().min(1),
55367
55496
  /** Display name. */
55368
55497
  label: string().min(1),
55369
- /** Remaining life % when known (0..100). */
55498
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
55370
55499
  level: number().min(0).max(100).nullable(),
55371
- /** Discrete state when known (binary mode). */
55372
- status: _enum(["ok", "replace"]).nullable(),
55500
+ /** The provider's discrete verdict when known (binary mode). */
55501
+ status: ConsumableStatusSchema.nullable(),
55502
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
55503
+ kind: ConsumableKindSchema.optional(),
55504
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
55505
+ form: ConsumableFormSchema.optional(),
55373
55506
  /** Ms epoch of the last replace, when known. */
55374
55507
  lastResetAt: number().nullable(),
55375
55508
  /** Whether `reset()` is meaningful for this item. */
@@ -55392,7 +55525,7 @@ var consumablesCapability = {
55392
55525
  kind: "widget",
55393
55526
  widgetId: "host/consumables-panel",
55394
55527
  tab: "consumables",
55395
- topTab: true,
55528
+ placement: "hero",
55396
55529
  label: "Consumables",
55397
55530
  order: 5
55398
55531
  } },
@@ -55453,9 +55586,37 @@ reset: method(object({
55453
55586
  */
55454
55587
  durability: "restored",
55455
55588
  /**
55456
- * History (D850): none — `items` is an array keyed by runtime ids; a history path never enters it.
55589
+ * History (D850, D917): one series per (item field, item `key`) — the item key
55590
+ * is the series scope, the item `label` names it. A vacuum tank's fill, a
55591
+ * brush's remaining life and a dishwasher's salt are each recorded the moment
55592
+ * their provider reports them; an item that appears later gets its series.
55457
55593
  */
55458
- history: "none",
55594
+ history: {
55595
+ fields: {},
55596
+ items: {
55597
+ path: "items",
55598
+ key: "key",
55599
+ label: "label",
55600
+ fields: {
55601
+ level: {
55602
+ kind: "gauge",
55603
+ unit: "%",
55604
+ deadband: 2,
55605
+ displayName: "Level"
55606
+ },
55607
+ status: {
55608
+ kind: "enum",
55609
+ displayName: "Status"
55610
+ },
55611
+ "remaining.value": {
55612
+ kind: "gauge",
55613
+ unitFrom: "remaining.unit",
55614
+ deadband: 1,
55615
+ displayName: "Remaining"
55616
+ }
55617
+ }
55618
+ }
55619
+ },
55459
55620
  /** Clocks, not content: a re-read that changed no item costs no commit. */
55460
55621
  volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
55461
55622
  };
@@ -55870,8 +56031,9 @@ onStatusChanged: { data: object({
55870
56031
  volatileStateFields: ["lastChangedAt"]
55871
56032
  };
55872
56033
  /**
55873
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55874
- * consumable levels (salt, rinse aid) and common program options.
56034
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
56035
+ * common program options. Salt and rinse aid are NOT here: they are items of
56036
+ * the device's `consumables` cap, like every other device's (D915).
55875
56037
  *
55876
56038
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55877
56039
  * by any integration that exposes the same program / option surface.
@@ -55919,11 +56081,6 @@ var DishwasherAvailabilitySchema = _enum([
55919
56081
  "offline",
55920
56082
  "description-missing"
55921
56083
  ]);
55922
- var DishwasherConsumableLevelSchema = _enum([
55923
- "ok",
55924
- "low",
55925
- "empty"
55926
- ]);
55927
56084
  var DishwasherStatusSchema = object({
55928
56085
  availability: DishwasherAvailabilitySchema,
55929
56086
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -55956,8 +56113,6 @@ var DishwasherStatusSchema = object({
55956
56113
  powerOn: boolean().nullable(),
55957
56114
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55958
56115
  powerState: string().nullable(),
55959
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
55960
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55961
56116
  /**
55962
56117
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55963
56118
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -58833,7 +58988,7 @@ var motionTriggerCapability = {
58833
58988
  enabled: boolean()
58834
58989
  }), _void(), {
58835
58990
  kind: "mutation",
58836
- auth: "admin"
58991
+ auth: "protected"
58837
58992
  }) },
58838
58993
  events: { onMotionTriggerChanged: { data: object({
58839
58994
  deviceId: number(),
@@ -59563,6 +59718,13 @@ var TopologyNodeSchema = object({
59563
59718
  cpuModel: string().nullable(),
59564
59719
  cpuCores: number(),
59565
59720
  memoryMB: number(),
59721
+ /**
59722
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
59723
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
59724
+ * about whether its hardware is there (a Coral delegate stays installed
59725
+ * after the stick leaves, D919); the live device set is
59726
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
59727
+ */
59566
59728
  engines: array(string()).readonly(),
59567
59729
  isHub: boolean(),
59568
59730
  isOnline: boolean(),
@@ -60680,7 +60842,28 @@ var ResolvedInferenceConfigSchema = object({
60680
60842
  format: ModelFormatSchema,
60681
60843
  reason: string()
60682
60844
  });
60683
- method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema);
60845
+ /**
60846
+ * The answer of an accelerator rescan (D919): the node's device list after
60847
+ * the re-probe, what changed, and the evidence that decided the Coral answer
60848
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
60849
+ * bus, the installed-delegate fallback, or nothing).
60850
+ */
60851
+ var AcceleratorRescanSchema = object({
60852
+ devices: array(InferenceDeviceDescriptorSchema).readonly(),
60853
+ appeared: array(string()).readonly(),
60854
+ disappeared: array(string()).readonly(),
60855
+ usbBus: _enum(["observed", "unobservable"]),
60856
+ decidedBy: _enum([
60857
+ "usb-ids",
60858
+ "pci",
60859
+ "delegate-fallback",
60860
+ "none"
60861
+ ])
60862
+ });
60863
+ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
60864
+ kind: "mutation",
60865
+ auth: "admin"
60866
+ });
60684
60867
  /**
60685
60868
  * Multi-metric electrical meter. One slice can carry any combination
60686
60869
  * of instantaneous power (W), cumulative energy (kWh), voltage (V),
@@ -64773,60 +64956,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64773
64956
  auth: "admin",
64774
64957
  access: "delete"
64775
64958
  });
64776
- /**
64777
- * Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
64778
- * cleaning lifecycle plus a return-to-base / locate surface and an
64779
- * optional fan-speed selector.
64780
- *
64781
- * State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
64782
- * `paused` / `returning` / `docked` / `error`. `batteryLevel`
64783
- * (0..100) is nullable — some vacuums don't report a battery
64784
- * percentage. `fanSpeed` is the current speed token (provider-verbatim,
64785
- * e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
64786
- * tokens the hardware accepts so the UI renders only supported choices.
64787
- *
64788
- * The `setFanSpeed` method takes the bare `speed` token — the provider
64789
- * validates it against the vacuum's own list. `locate` triggers the
64790
- * find-me chirp; `returnToBase` sends it home.
64791
- *
64792
- * Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
64793
- * `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
64794
- * 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
64795
- * SHOULD populate whichever tanks the hardware has — leave a field `null`
64796
- * only when the device has no such tank at all, and use a `TankStatus`
64797
- * with both inner fields `null` when the tank exists but its level is
64798
- * currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
64799
- * so the HA provider leaves all four `null`.
64800
- */
64801
- var VacuumStateSchema = _enum([
64802
- "idle",
64803
- "cleaning",
64804
- "paused",
64805
- "returning",
64806
- "docked",
64807
- "drying",
64808
- "error"
64809
- ]);
64810
- /**
64811
- * One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
64812
- * detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
64813
- * a discrete `status` (binary-style hardware), or both. Both `null` means the
64814
- * level is currently unknown; the OWNING field being `null` means the
64815
- * hardware has no such tank at all.
64816
- */
64817
- var TankStatusSchema = object({
64818
- /** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
64819
- level: number().min(0).max(100).nullable(),
64820
- /** Discrete state when the hardware is binary-mode; null otherwise. */
64821
- status: _enum([
64822
- "ok",
64823
- "low",
64824
- "full"
64825
- ]).nullable()
64826
- });
64827
64959
  var VacuumControlStatusSchema = object({
64828
64960
  /** Lifecycle state of the vacuum. */
64829
- state: VacuumStateSchema,
64961
+ state: _enum([
64962
+ "idle",
64963
+ "cleaning",
64964
+ "paused",
64965
+ "returning",
64966
+ "docked",
64967
+ "drying",
64968
+ "error"
64969
+ ]),
64830
64970
  /** 0..100 battery percentage. Null when the device has no battery
64831
64971
  * reading. */
64832
64972
  batteryLevel: number().min(0).max(100).nullable(),
@@ -64835,14 +64975,6 @@ var VacuumControlStatusSchema = object({
64835
64975
  fanSpeed: string().nullable(),
64836
64976
  /** Speed tokens the hardware accepts — drives the UI selector. */
64837
64977
  availableFanSpeeds: array(string()),
64838
- /** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
64839
- cleanWater: TankStatusSchema.nullable(),
64840
- /** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
64841
- dirtyWater: TankStatusSchema.nullable(),
64842
- /** Detergent tank. Null when the hardware has no detergent tank. */
64843
- detergent: TankStatusSchema.nullable(),
64844
- /** Dust bin. Null when the hardware has no dust bin. */
64845
- dustBin: TankStatusSchema.nullable(),
64846
64978
  /** 0..100 cleaning-completion percentage of the current task, or null. */
64847
64979
  progressPercent: number().min(0).max(100).nullable(),
64848
64980
  /** Current error code (0 / null = no error). */
@@ -64904,35 +65036,14 @@ var vacuumControlCapability = {
64904
65036
  */
64905
65037
  durability: "session",
64906
65038
  /**
64907
- * History (D850): recorded series. Tank levels are fixed-object paths (`cleanWater.level`, ...).
65039
+ * History (D850): recorded series. The tanks moved to `consumables` (D915), whose
65040
+ * items are keyed by runtime ids and record no history.
64908
65041
  */
64909
- history: { fields: {
64910
- batteryLevel: {
64911
- kind: "gauge",
64912
- unit: "%",
64913
- deadband: 2
64914
- },
64915
- "cleanWater.level": {
64916
- kind: "gauge",
64917
- unit: "%",
64918
- deadband: 2
64919
- },
64920
- "dirtyWater.level": {
64921
- kind: "gauge",
64922
- unit: "%",
64923
- deadband: 2
64924
- },
64925
- "detergent.level": {
64926
- kind: "gauge",
64927
- unit: "%",
64928
- deadband: 2
64929
- },
64930
- "dustBin.level": {
64931
- kind: "gauge",
64932
- unit: "%",
64933
- deadband: 2
64934
- }
64935
- } }
65042
+ history: { fields: { batteryLevel: {
65043
+ kind: "gauge",
65044
+ unit: "%",
65045
+ deadband: 2
65046
+ } } }
64936
65047
  };
64937
65048
  var ValveStatusSchema = object({
64938
65049
  /** Lifecycle state of the valve. */
@@ -69326,6 +69437,12 @@ Object.freeze({
69326
69437
  addonId: null,
69327
69438
  access: "create"
69328
69439
  },
69440
+ "deviceHistory.deleteOrphanSeries": {
69441
+ capName: "device-history",
69442
+ capScope: "system",
69443
+ addonId: null,
69444
+ access: "delete"
69445
+ },
69329
69446
  "deviceHistory.getDeviceEnabled": {
69330
69447
  capName: "device-history",
69331
69448
  capScope: "system",
@@ -69344,6 +69461,12 @@ Object.freeze({
69344
69461
  addonId: null,
69345
69462
  access: "view"
69346
69463
  },
69464
+ "deviceHistory.listOrphanSeries": {
69465
+ capName: "device-history",
69466
+ capScope: "system",
69467
+ addonId: null,
69468
+ access: "view"
69469
+ },
69347
69470
  "deviceHistory.listSeries": {
69348
69471
  capName: "device-history",
69349
69472
  capScope: "system",
@@ -72968,6 +73091,12 @@ Object.freeze({
72968
73091
  addonId: null,
72969
73092
  access: "delete"
72970
73093
  },
73094
+ "pipelineOrchestrator.forgetInferenceDevice": {
73095
+ capName: "pipeline-orchestrator",
73096
+ capScope: "system",
73097
+ addonId: null,
73098
+ access: "delete"
73099
+ },
72971
73100
  "pipelineOrchestrator.getAgentLoad": {
72972
73101
  capName: "pipeline-orchestrator",
72973
73102
  capScope: "system",
@@ -73544,6 +73673,12 @@ Object.freeze({
73544
73673
  addonId: null,
73545
73674
  access: "view"
73546
73675
  },
73676
+ "platformProbe.rescanAccelerators": {
73677
+ capName: "platform-probe",
73678
+ capScope: "system",
73679
+ addonId: null,
73680
+ access: "create"
73681
+ },
73547
73682
  "platformProbe.resolveHwAccel": {
73548
73683
  capName: "platform-probe",
73549
73684
  capScope: "system",
@@ -79415,7 +79550,7 @@ var STATE_SUMMARY_VARS = [
79415
79550
  ([...RULE_TEXT], [...COMBINED_ALARM]),
79416
79551
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
79417
79552
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
79418
- ([...RULE_TEXT], [...CONSUMABLE]),
79553
+ ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
79419
79554
  ([...RULE_TEXT], [...TANK]),
79420
79555
  [...RULE_TEXT],
79421
79556
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
package/dist/addon.mjs CHANGED
@@ -5431,7 +5431,7 @@ var ZodIssueCode = {
5431
5431
  var ZodFirstPartyTypeKind;
5432
5432
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5433
5433
  //#endregion
5434
- //#region ../types/dist/sleep-DJFUfKvA.mjs
5434
+ //#region ../types/dist/sleep-CUp20JkO.mjs
5435
5435
  /**
5436
5436
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5437
5437
  * window to float samples (D455).
@@ -8323,7 +8323,11 @@ var ContributionSectionSchema = object({
8323
8323
  literal(4)
8324
8324
  ]).optional(),
8325
8325
  tab: string().optional(),
8326
- location: _enum(["settings", "top-tab"]).optional(),
8326
+ location: _enum([
8327
+ "settings",
8328
+ "top-tab",
8329
+ "hero"
8330
+ ]).optional(),
8327
8331
  order: number().optional(),
8328
8332
  fields: array(any())
8329
8333
  });
@@ -13377,7 +13381,11 @@ var ConfigSectionWithValuesSchema = object({
13377
13381
  literal(4)
13378
13382
  ]).optional(),
13379
13383
  tab: string().optional(),
13380
- location: _enum(["settings", "top-tab"]).optional(),
13384
+ location: _enum([
13385
+ "settings",
13386
+ "top-tab",
13387
+ "hero"
13388
+ ]).optional(),
13381
13389
  order: number().optional(),
13382
13390
  fields: array(any())
13383
13391
  });
@@ -17257,6 +17265,52 @@ var TierStatusSchema = object({
17257
17265
  countedAt: number().nullable()
17258
17266
  });
17259
17267
  /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
17268
+ /**
17269
+ * Why a series is orphan. `device-gone`: its device is absent from the
17270
+ * successful device listings (the departure clock). `undeclared`: its `cap:`
17271
+ * key is declared by no capability any more (a field a cap removed).
17272
+ */
17273
+ var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
17274
+ /** Rows held per stored tier. */
17275
+ var TierRowsSchema = object({
17276
+ raw: number().int(),
17277
+ "5m": number().int(),
17278
+ "1h": number().int(),
17279
+ "1d": number().int()
17280
+ });
17281
+ var OrphanSeriesSchema = object({
17282
+ seriesId: number().int(),
17283
+ deviceId: number().int(),
17284
+ key: string(),
17285
+ scope: string(),
17286
+ /** The metric's display name; `null` when its metric row is gone too. */
17287
+ displayName: string().nullable(),
17288
+ reason: DeviceHistoryOrphanReasonSchema,
17289
+ /** `device-gone`: since when the device has been absent; `null` otherwise. */
17290
+ missingSince: number().nullable(),
17291
+ firstTs: number(),
17292
+ lastTs: number(),
17293
+ rows: TierRowsSchema
17294
+ });
17295
+ var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
17296
+ "not-found",
17297
+ "not-orphan",
17298
+ "failed"
17299
+ ]);
17300
+ var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
17301
+ seriesId: number().int(),
17302
+ ok: literal(true),
17303
+ deleted: TierRowsSchema
17304
+ }), object({
17305
+ seriesId: number().int(),
17306
+ ok: literal(false),
17307
+ reason: DeviceHistoryOrphanDeleteRefusalSchema
17308
+ })]);
17309
+ var OrphanListSchema = object({
17310
+ series: array(OrphanSeriesSchema).readonly(),
17311
+ /** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
17312
+ truncated: boolean()
17313
+ });
17260
17314
  var DeviceHistoryStatusSchema = object({
17261
17315
  startedAt: number(),
17262
17316
  /** The store is declared, series loaded and the first reconcile has answered. */
@@ -17354,7 +17408,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
17354
17408
  }), object({ enabled: boolean() }), {
17355
17409
  kind: "mutation",
17356
17410
  auth: "admin"
17357
- }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
17411
+ }), 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() }), {
17412
+ kind: "mutation",
17413
+ auth: "admin"
17414
+ });
17358
17415
  var DeviceCaStatusSchema = discriminatedUnion("state", [
17359
17416
  object({ state: literal("absent") }),
17360
17417
  object({
@@ -50308,6 +50365,19 @@ var NodeInferenceDeviceSchema = object({
50308
50365
  /** Whether the node's live probe reports the device as usable right now. */
50309
50366
  available: boolean(),
50310
50367
  /**
50368
+ * Is the device on the node at all (D919)? `present` — the live probe
50369
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
50370
+ * its stored settings remain (unplugged, moved to another node): never
50371
+ * eligible, whatever its stored `enabled`, and forgettable with
50372
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
50373
+ * claimed (D315). Optional only for an orchestrator older than the field.
50374
+ */
50375
+ presence: _enum([
50376
+ "present",
50377
+ "absent",
50378
+ "unknown"
50379
+ ]).optional(),
50380
+ /**
50311
50381
  * Whether this device participates in dispatch. AUTO default (spec C2):
50312
50382
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
50313
50383
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -50533,7 +50603,13 @@ method(object({
50533
50603
  }), object({ success: literal(true) }), {
50534
50604
  kind: "mutation",
50535
50605
  auth: "admin"
50536
- }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
50606
+ }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
50607
+ agentNodeId: string(),
50608
+ deviceKey: string()
50609
+ }), object({ success: literal(true) }), {
50610
+ kind: "mutation",
50611
+ auth: "admin"
50612
+ }), method(object({ agentNodeId: string() }), object({
50537
50613
  success: literal(true),
50538
50614
  /** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
50539
50615
  effectiveModelId: string().nullable(),
@@ -55309,17 +55385,69 @@ var connectivityCapability = {
55309
55385
  volatileStateFields: ["lastChangedAt"]
55310
55386
  };
55311
55387
  /**
55312
- * Generic device-consumables capability — surfaces a device's
55313
- * maintenance items (vacuum filters/brushes, replaceable cartridges,
55314
- * descaling cycles, …) with their remaining life and an optional
55315
- * "Replaced" reset action. Device-agnostic: any provider that knows its
55316
- * device tracks consumables can register it; the cap declares no
55317
- * vocabulary of its own — the provider names each item verbatim.
55388
+ * Generic device-consumables capability — the ONE place a device reports what
55389
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
55390
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
55391
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
55392
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
55393
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
55394
+ * its device tracks consumables registers it; the provider names each item
55395
+ * verbatim and says which `kind` it is.
55396
+ *
55397
+ * The admin UI renders it as ONE collapsible section directly under the
55398
+ * device page's hero card (`placement: 'hero'`), for every device bound to
55399
+ * this cap — never drawn by a device type's hero card itself (D915).
55318
55400
  *
55319
55401
  * Like `childLayout`, the cap is INERT until a provider sets items: no
55320
55402
  * provider populates it by guessing (no HA inference). The UI renders a
55321
55403
  * "No consumables reported" placeholder when `items` is empty.
55322
55404
  */
55405
+ /**
55406
+ * What an item IS, which decides which direction is bad:
55407
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
55408
+ * - `supply` — something the device draws from (clean water, detergent,
55409
+ * salt, rinse aid); low or empty is bad.
55410
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
55411
+ * bad.
55412
+ * Absent = `wear`.
55413
+ */
55414
+ var ConsumableKindSchema = _enum([
55415
+ "wear",
55416
+ "supply",
55417
+ "waste"
55418
+ ]);
55419
+ /**
55420
+ * What an item LOOKS like, which decides how a client draws it — independent
55421
+ * of `kind`, which decides which direction is bad:
55422
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
55423
+ * remaining time and a reset.
55424
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
55425
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
55426
+ * a stepped level and "refill".
55427
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
55428
+ * that warns when full.
55429
+ * Absent = derived from the kind ({@link consumableFormOf}).
55430
+ */
55431
+ var ConsumableFormSchema = _enum([
55432
+ "part",
55433
+ "tank",
55434
+ "product",
55435
+ "bin"
55436
+ ]);
55437
+ /** The provider's own discrete verdict on an item. */
55438
+ var ConsumableStatusSchema = _enum([
55439
+ "ok",
55440
+ "low",
55441
+ "empty",
55442
+ "full",
55443
+ "replace"
55444
+ ]);
55445
+ _enum([
55446
+ "ok",
55447
+ "low",
55448
+ "empty",
55449
+ "full"
55450
+ ]);
55323
55451
  /** Units a remaining-life counter is reported in. Closed: the panel renders
55324
55452
  * each. */
55325
55453
  var ConsumableRemainingUnitSchema = _enum([
@@ -55334,18 +55462,23 @@ var ConsumableRemainingSchema = object({
55334
55462
  unit: ConsumableRemainingUnitSchema
55335
55463
  });
55336
55464
  /** A single consumable item. Either a continuous `level` (remaining
55337
- * life %) or a discrete `status` may be known — both may be null when a
55338
- * provider only knows the item exists. `level` and `status` are not
55339
- * mutually exclusive; a provider may report both. */
55465
+ * life %, or fill % for a `supply` / `waste` item) or a discrete `status`
55466
+ * may be known — both may be null when a provider only knows the item
55467
+ * exists. `level` and `status` are not mutually exclusive; a provider may
55468
+ * report both. */
55340
55469
  var ConsumableItemSchema = object({
55341
55470
  /** Stable id, e.g. 'main-brush'. */
55342
55471
  key: string().min(1),
55343
55472
  /** Display name. */
55344
55473
  label: string().min(1),
55345
- /** Remaining life % when known (0..100). */
55474
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
55346
55475
  level: number().min(0).max(100).nullable(),
55347
- /** Discrete state when known (binary mode). */
55348
- status: _enum(["ok", "replace"]).nullable(),
55476
+ /** The provider's discrete verdict when known (binary mode). */
55477
+ status: ConsumableStatusSchema.nullable(),
55478
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
55479
+ kind: ConsumableKindSchema.optional(),
55480
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
55481
+ form: ConsumableFormSchema.optional(),
55349
55482
  /** Ms epoch of the last replace, when known. */
55350
55483
  lastResetAt: number().nullable(),
55351
55484
  /** Whether `reset()` is meaningful for this item. */
@@ -55368,7 +55501,7 @@ var consumablesCapability = {
55368
55501
  kind: "widget",
55369
55502
  widgetId: "host/consumables-panel",
55370
55503
  tab: "consumables",
55371
- topTab: true,
55504
+ placement: "hero",
55372
55505
  label: "Consumables",
55373
55506
  order: 5
55374
55507
  } },
@@ -55429,9 +55562,37 @@ reset: method(object({
55429
55562
  */
55430
55563
  durability: "restored",
55431
55564
  /**
55432
- * History (D850): none — `items` is an array keyed by runtime ids; a history path never enters it.
55565
+ * History (D850, D917): one series per (item field, item `key`) — the item key
55566
+ * is the series scope, the item `label` names it. A vacuum tank's fill, a
55567
+ * brush's remaining life and a dishwasher's salt are each recorded the moment
55568
+ * their provider reports them; an item that appears later gets its series.
55433
55569
  */
55434
- history: "none",
55570
+ history: {
55571
+ fields: {},
55572
+ items: {
55573
+ path: "items",
55574
+ key: "key",
55575
+ label: "label",
55576
+ fields: {
55577
+ level: {
55578
+ kind: "gauge",
55579
+ unit: "%",
55580
+ deadband: 2,
55581
+ displayName: "Level"
55582
+ },
55583
+ status: {
55584
+ kind: "enum",
55585
+ displayName: "Status"
55586
+ },
55587
+ "remaining.value": {
55588
+ kind: "gauge",
55589
+ unitFrom: "remaining.unit",
55590
+ deadband: 1,
55591
+ displayName: "Remaining"
55592
+ }
55593
+ }
55594
+ }
55595
+ },
55435
55596
  /** Clocks, not content: a re-read that changed no item costs no commit. */
55436
55597
  volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
55437
55598
  };
@@ -55846,8 +56007,9 @@ onStatusChanged: { data: object({
55846
56007
  volatileStateFields: ["lastChangedAt"]
55847
56008
  };
55848
56009
  /**
55849
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55850
- * consumable levels (salt, rinse aid) and common program options.
56010
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
56011
+ * common program options. Salt and rinse aid are NOT here: they are items of
56012
+ * the device's `consumables` cap, like every other device's (D915).
55851
56013
  *
55852
56014
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55853
56015
  * by any integration that exposes the same program / option surface.
@@ -55895,11 +56057,6 @@ var DishwasherAvailabilitySchema = _enum([
55895
56057
  "offline",
55896
56058
  "description-missing"
55897
56059
  ]);
55898
- var DishwasherConsumableLevelSchema = _enum([
55899
- "ok",
55900
- "low",
55901
- "empty"
55902
- ]);
55903
56060
  var DishwasherStatusSchema = object({
55904
56061
  availability: DishwasherAvailabilitySchema,
55905
56062
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -55932,8 +56089,6 @@ var DishwasherStatusSchema = object({
55932
56089
  powerOn: boolean().nullable(),
55933
56090
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55934
56091
  powerState: string().nullable(),
55935
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
55936
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55937
56092
  /**
55938
56093
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55939
56094
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -58809,7 +58964,7 @@ var motionTriggerCapability = {
58809
58964
  enabled: boolean()
58810
58965
  }), _void(), {
58811
58966
  kind: "mutation",
58812
- auth: "admin"
58967
+ auth: "protected"
58813
58968
  }) },
58814
58969
  events: { onMotionTriggerChanged: { data: object({
58815
58970
  deviceId: number(),
@@ -59539,6 +59694,13 @@ var TopologyNodeSchema = object({
59539
59694
  cpuModel: string().nullable(),
59540
59695
  cpuCores: number(),
59541
59696
  memoryMB: number(),
59697
+ /**
59698
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
59699
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
59700
+ * about whether its hardware is there (a Coral delegate stays installed
59701
+ * after the stick leaves, D919); the live device set is
59702
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
59703
+ */
59542
59704
  engines: array(string()).readonly(),
59543
59705
  isHub: boolean(),
59544
59706
  isOnline: boolean(),
@@ -60656,7 +60818,28 @@ var ResolvedInferenceConfigSchema = object({
60656
60818
  format: ModelFormatSchema,
60657
60819
  reason: string()
60658
60820
  });
60659
- method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema);
60821
+ /**
60822
+ * The answer of an accelerator rescan (D919): the node's device list after
60823
+ * the re-probe, what changed, and the evidence that decided the Coral answer
60824
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
60825
+ * bus, the installed-delegate fallback, or nothing).
60826
+ */
60827
+ var AcceleratorRescanSchema = object({
60828
+ devices: array(InferenceDeviceDescriptorSchema).readonly(),
60829
+ appeared: array(string()).readonly(),
60830
+ disappeared: array(string()).readonly(),
60831
+ usbBus: _enum(["observed", "unobservable"]),
60832
+ decidedBy: _enum([
60833
+ "usb-ids",
60834
+ "pci",
60835
+ "delegate-fallback",
60836
+ "none"
60837
+ ])
60838
+ });
60839
+ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
60840
+ kind: "mutation",
60841
+ auth: "admin"
60842
+ });
60660
60843
  /**
60661
60844
  * Multi-metric electrical meter. One slice can carry any combination
60662
60845
  * of instantaneous power (W), cumulative energy (kWh), voltage (V),
@@ -64749,60 +64932,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64749
64932
  auth: "admin",
64750
64933
  access: "delete"
64751
64934
  });
64752
- /**
64753
- * Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
64754
- * cleaning lifecycle plus a return-to-base / locate surface and an
64755
- * optional fan-speed selector.
64756
- *
64757
- * State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
64758
- * `paused` / `returning` / `docked` / `error`. `batteryLevel`
64759
- * (0..100) is nullable — some vacuums don't report a battery
64760
- * percentage. `fanSpeed` is the current speed token (provider-verbatim,
64761
- * e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
64762
- * tokens the hardware accepts so the UI renders only supported choices.
64763
- *
64764
- * The `setFanSpeed` method takes the bare `speed` token — the provider
64765
- * validates it against the vacuum's own list. `locate` triggers the
64766
- * find-me chirp; `returnToBase` sends it home.
64767
- *
64768
- * Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
64769
- * `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
64770
- * 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
64771
- * SHOULD populate whichever tanks the hardware has — leave a field `null`
64772
- * only when the device has no such tank at all, and use a `TankStatus`
64773
- * with both inner fields `null` when the tank exists but its level is
64774
- * currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
64775
- * so the HA provider leaves all four `null`.
64776
- */
64777
- var VacuumStateSchema = _enum([
64778
- "idle",
64779
- "cleaning",
64780
- "paused",
64781
- "returning",
64782
- "docked",
64783
- "drying",
64784
- "error"
64785
- ]);
64786
- /**
64787
- * One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
64788
- * detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
64789
- * a discrete `status` (binary-style hardware), or both. Both `null` means the
64790
- * level is currently unknown; the OWNING field being `null` means the
64791
- * hardware has no such tank at all.
64792
- */
64793
- var TankStatusSchema = object({
64794
- /** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
64795
- level: number().min(0).max(100).nullable(),
64796
- /** Discrete state when the hardware is binary-mode; null otherwise. */
64797
- status: _enum([
64798
- "ok",
64799
- "low",
64800
- "full"
64801
- ]).nullable()
64802
- });
64803
64935
  var VacuumControlStatusSchema = object({
64804
64936
  /** Lifecycle state of the vacuum. */
64805
- state: VacuumStateSchema,
64937
+ state: _enum([
64938
+ "idle",
64939
+ "cleaning",
64940
+ "paused",
64941
+ "returning",
64942
+ "docked",
64943
+ "drying",
64944
+ "error"
64945
+ ]),
64806
64946
  /** 0..100 battery percentage. Null when the device has no battery
64807
64947
  * reading. */
64808
64948
  batteryLevel: number().min(0).max(100).nullable(),
@@ -64811,14 +64951,6 @@ var VacuumControlStatusSchema = object({
64811
64951
  fanSpeed: string().nullable(),
64812
64952
  /** Speed tokens the hardware accepts — drives the UI selector. */
64813
64953
  availableFanSpeeds: array(string()),
64814
- /** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
64815
- cleanWater: TankStatusSchema.nullable(),
64816
- /** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
64817
- dirtyWater: TankStatusSchema.nullable(),
64818
- /** Detergent tank. Null when the hardware has no detergent tank. */
64819
- detergent: TankStatusSchema.nullable(),
64820
- /** Dust bin. Null when the hardware has no dust bin. */
64821
- dustBin: TankStatusSchema.nullable(),
64822
64954
  /** 0..100 cleaning-completion percentage of the current task, or null. */
64823
64955
  progressPercent: number().min(0).max(100).nullable(),
64824
64956
  /** Current error code (0 / null = no error). */
@@ -64880,35 +65012,14 @@ var vacuumControlCapability = {
64880
65012
  */
64881
65013
  durability: "session",
64882
65014
  /**
64883
- * History (D850): recorded series. Tank levels are fixed-object paths (`cleanWater.level`, ...).
65015
+ * History (D850): recorded series. The tanks moved to `consumables` (D915), whose
65016
+ * items are keyed by runtime ids and record no history.
64884
65017
  */
64885
- history: { fields: {
64886
- batteryLevel: {
64887
- kind: "gauge",
64888
- unit: "%",
64889
- deadband: 2
64890
- },
64891
- "cleanWater.level": {
64892
- kind: "gauge",
64893
- unit: "%",
64894
- deadband: 2
64895
- },
64896
- "dirtyWater.level": {
64897
- kind: "gauge",
64898
- unit: "%",
64899
- deadband: 2
64900
- },
64901
- "detergent.level": {
64902
- kind: "gauge",
64903
- unit: "%",
64904
- deadband: 2
64905
- },
64906
- "dustBin.level": {
64907
- kind: "gauge",
64908
- unit: "%",
64909
- deadband: 2
64910
- }
64911
- } }
65018
+ history: { fields: { batteryLevel: {
65019
+ kind: "gauge",
65020
+ unit: "%",
65021
+ deadband: 2
65022
+ } } }
64912
65023
  };
64913
65024
  var ValveStatusSchema = object({
64914
65025
  /** Lifecycle state of the valve. */
@@ -69302,6 +69413,12 @@ Object.freeze({
69302
69413
  addonId: null,
69303
69414
  access: "create"
69304
69415
  },
69416
+ "deviceHistory.deleteOrphanSeries": {
69417
+ capName: "device-history",
69418
+ capScope: "system",
69419
+ addonId: null,
69420
+ access: "delete"
69421
+ },
69305
69422
  "deviceHistory.getDeviceEnabled": {
69306
69423
  capName: "device-history",
69307
69424
  capScope: "system",
@@ -69320,6 +69437,12 @@ Object.freeze({
69320
69437
  addonId: null,
69321
69438
  access: "view"
69322
69439
  },
69440
+ "deviceHistory.listOrphanSeries": {
69441
+ capName: "device-history",
69442
+ capScope: "system",
69443
+ addonId: null,
69444
+ access: "view"
69445
+ },
69323
69446
  "deviceHistory.listSeries": {
69324
69447
  capName: "device-history",
69325
69448
  capScope: "system",
@@ -72944,6 +73067,12 @@ Object.freeze({
72944
73067
  addonId: null,
72945
73068
  access: "delete"
72946
73069
  },
73070
+ "pipelineOrchestrator.forgetInferenceDevice": {
73071
+ capName: "pipeline-orchestrator",
73072
+ capScope: "system",
73073
+ addonId: null,
73074
+ access: "delete"
73075
+ },
72947
73076
  "pipelineOrchestrator.getAgentLoad": {
72948
73077
  capName: "pipeline-orchestrator",
72949
73078
  capScope: "system",
@@ -73520,6 +73649,12 @@ Object.freeze({
73520
73649
  addonId: null,
73521
73650
  access: "view"
73522
73651
  },
73652
+ "platformProbe.rescanAccelerators": {
73653
+ capName: "platform-probe",
73654
+ capScope: "system",
73655
+ addonId: null,
73656
+ access: "create"
73657
+ },
73523
73658
  "platformProbe.resolveHwAccel": {
73524
73659
  capName: "platform-probe",
73525
73660
  capScope: "system",
@@ -79391,7 +79526,7 @@ var STATE_SUMMARY_VARS = [
79391
79526
  ([...RULE_TEXT], [...COMBINED_ALARM]),
79392
79527
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
79393
79528
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
79394
- ([...RULE_TEXT], [...CONSUMABLE]),
79529
+ ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
79395
79530
  ([...RULE_TEXT], [...TANK]),
79396
79531
  [...RULE_TEXT],
79397
79532
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rtsp",
3
- "version": "1.2.143",
3
+ "version": "1.2.145",
4
4
  "description": "Generic RTSP camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",