@camstack/addon-terminal 0.1.133 → 0.1.135

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 +587 -15
  2. package/dist/addon.mjs +587 -15
  3. package/package.json +1 -1
package/dist/addon.mjs CHANGED
@@ -8,7 +8,7 @@ import { createServer } from "node:http";
8
8
  //#region \0rolldown/runtime.js
9
9
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
10
10
  //#endregion
11
- //#region ../types/dist/event-category-BvOFi6PY.mjs
11
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
12
12
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
13
13
  EventCategory["SystemBoot"] = "system.boot";
14
14
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -87,9 +87,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
87
87
  /**
88
88
  * The node's one-shot runner boot check (D877): planned runners against the
89
89
  * process service, `degraded` when any is failed, refused or missing. The
90
- * alert centre turns it into one alert and a direct critical push.
90
+ * alert centre turns it into one critical alert.
91
91
  */
92
92
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
93
+ /**
94
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
95
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
96
+ * centre sends no notification of its own: Notification Center turns this
97
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
98
+ * system-event kinds, and reconciles from the alerts store because a bus
99
+ * event may be dropped (D8, D11).
100
+ */
101
+ EventCategory["AlertEpisode"] = "alert.episode";
93
102
  EventCategory["AddonError"] = "addon.error";
94
103
  EventCategory["AddonPageReady"] = "addon.page-ready";
95
104
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5414,7 +5423,7 @@ var ZodIssueCode = {
5414
5423
  var ZodFirstPartyTypeKind;
5415
5424
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5416
5425
  //#endregion
5417
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5426
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5418
5427
  /**
5419
5428
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5420
5429
  * window to float samples (D455).
@@ -8492,7 +8501,7 @@ object({
8492
8501
  params: record(string(), union([string(), number()])).optional()
8493
8502
  });
8494
8503
  //#endregion
8495
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8504
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8496
8505
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8497
8506
  DeviceType["Camera"] = "camera";
8498
8507
  DeviceType["Hub"] = "hub";
@@ -8584,6 +8593,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8584
8593
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8585
8594
  * integrations sharing the same food/desiccant/hopper surface. */
8586
8595
  DeviceType["PetFeeder"] = "pet-feeder";
8596
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8597
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8598
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8599
+ DeviceType["Dishwasher"] = "dishwasher";
8587
8600
  return DeviceType;
8588
8601
  }({});
8589
8602
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8841,7 +8854,7 @@ function errMsg(err) {
8841
8854
  return String(err);
8842
8855
  }
8843
8856
  //#endregion
8844
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8857
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8845
8858
  /**
8846
8859
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8847
8860
  *
@@ -13259,8 +13272,20 @@ var AlertSeveritySchema = _enum([
13259
13272
  "info",
13260
13273
  "success",
13261
13274
  "warning",
13262
- "error"
13275
+ "error",
13276
+ "critical"
13263
13277
  ]);
13278
+ var AlertActionSchema = object({
13279
+ label: string(),
13280
+ href: string().optional(),
13281
+ /**
13282
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13283
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13284
+ * start) — the browser must leave the SPA with a full navigation, because
13285
+ * the SPA has no such route and would bounce to the home page.
13286
+ */
13287
+ navigation: _enum(["app", "server"]).optional()
13288
+ });
13264
13289
  var AlertStatusSchema = _enum([
13265
13290
  "active",
13266
13291
  "in-progress",
@@ -13278,6 +13303,7 @@ var AlertSchema = object({
13278
13303
  severity: AlertSeveritySchema,
13279
13304
  title: string(),
13280
13305
  message: string(),
13306
+ action: AlertActionSchema.optional(),
13281
13307
  status: AlertStatusSchema,
13282
13308
  progress: number().optional(),
13283
13309
  read: boolean(),
@@ -17639,7 +17665,11 @@ var deviceDiscoveryCapability = {
17639
17665
  };
17640
17666
  /**
17641
17667
  * `device-adoption` — generic discovery + adoption surface,
17642
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17668
+ * system-scoped collection (one provider per integration addon), routed
17669
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17670
+ * pin model as `connection-test`. The admin UI keeps using
17671
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17672
+ * successor to `ha-discovery`:
17643
17673
  * keyed by `integrationId` (the addon resolves integrationId → broker
17644
17674
  * internally) rather than a connection-specific `brokerId`, and it
17645
17675
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -41889,6 +41919,9 @@ var NcSystemEventKindSchema = _enum([
41889
41919
  "server-updated",
41890
41920
  "export-completed",
41891
41921
  "backup-completed",
41922
+ "alert-critical",
41923
+ "alert-error",
41924
+ "alert-critical-resolved",
41892
41925
  "camera-online",
41893
41926
  "camera-offline",
41894
41927
  "camera-disabled",
@@ -51069,7 +51102,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51069
51102
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51070
51103
  kind: "mutation",
51071
51104
  auth: "admin"
51072
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51105
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51106
+ clear: boolean(),
51107
+ repointLocationId: string().optional()
51108
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51073
51109
  kind: "mutation",
51074
51110
  auth: "admin"
51075
51111
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -53886,7 +53922,8 @@ var batteryCapability = {
53886
53922
  DeviceType.Button,
53887
53923
  DeviceType.Switch,
53888
53924
  DeviceType.PetFeeder,
53889
- DeviceType.Container
53925
+ DeviceType.Container,
53926
+ DeviceType.Thermostat
53890
53927
  ],
53891
53928
  methods: {
53892
53929
  /**
@@ -55359,6 +55396,294 @@ onStatusChanged: { data: object({
55359
55396
  * whether persisting is worth a SQLite commit. */
55360
55397
  volatileStateFields: ["lastChangedAt"]
55361
55398
  };
55399
+ /**
55400
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55401
+ * consumable levels (salt, rinse aid) and common program options.
55402
+ *
55403
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55404
+ * by any integration that exposes the same program / option surface.
55405
+ *
55406
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55407
+ * provider refreshes the slice on an interval and eagerly after commands.
55408
+ *
55409
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55410
+ * nullable: `null` means "not known right now" (the appliance has not said,
55411
+ * the link is down, or the description does not carry it) and is never
55412
+ * rendered or exported as `false` / `0`. `availability` says why.
55413
+ */
55414
+ var DishwasherStateSchema = _enum([
55415
+ "idle",
55416
+ "running",
55417
+ "paused",
55418
+ "finished",
55419
+ "error",
55420
+ "unavailable"
55421
+ ]);
55422
+ /**
55423
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55424
+ * view for compact surfaces; this is what the appliance said.
55425
+ */
55426
+ var DishwasherOperationStateSchema = _enum([
55427
+ "Inactive",
55428
+ "Ready",
55429
+ "DelayedStart",
55430
+ "Run",
55431
+ "Pause",
55432
+ "ActionRequired",
55433
+ "Finished",
55434
+ "Error",
55435
+ "Aborting"
55436
+ ]);
55437
+ /**
55438
+ * Why fields may be `null`:
55439
+ * - `available` — the link is up and the description is loaded;
55440
+ * - `offline` — the local link is down (values are unknown, not last-known);
55441
+ * - `description-missing` — the link is up but the appliance's description could not
55442
+ * be loaded, so its values cannot be decoded.
55443
+ */
55444
+ var DishwasherAvailabilitySchema = _enum([
55445
+ "available",
55446
+ "offline",
55447
+ "description-missing"
55448
+ ]);
55449
+ var DishwasherConsumableLevelSchema = _enum([
55450
+ "ok",
55451
+ "low",
55452
+ "empty"
55453
+ ]);
55454
+ var DishwasherStatusSchema = object({
55455
+ availability: DishwasherAvailabilitySchema,
55456
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55457
+ state: DishwasherStateSchema,
55458
+ /** The appliance's operation state as reported; null when not known. */
55459
+ operationState: DishwasherOperationStateSchema.nullable(),
55460
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55461
+ program: string().nullable(),
55462
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55463
+ selectedProgram: string().nullable(),
55464
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55465
+ availablePrograms: array(string()),
55466
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55467
+ remainingSeconds: number().int().nonnegative().nullable(),
55468
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55469
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55470
+ /** Cycle completion 0..100, or null when not applicable. */
55471
+ progressPercent: number().min(0).max(100).nullable(),
55472
+ /** True when the door is reported open; null when the door state is not known. */
55473
+ doorOpen: boolean().nullable(),
55474
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55475
+ doorLocked: boolean().nullable(),
55476
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55477
+ remoteStartAllowed: boolean().nullable(),
55478
+ /** True when the appliance accepts remote control now; null when not known. */
55479
+ remoteControlActive: boolean().nullable(),
55480
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55481
+ localControlActive: boolean().nullable(),
55482
+ /** Main power / switched-on state; null when not known. */
55483
+ powerOn: boolean().nullable(),
55484
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55485
+ powerState: string().nullable(),
55486
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55487
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55488
+ /** Option states: null when the appliance does not expose the option or has not said. */
55489
+ halfLoad: boolean().nullable(),
55490
+ hygienePlus: boolean().nullable(),
55491
+ /** Extra dry option when the appliance exposes it. */
55492
+ extraDry: boolean().nullable(),
55493
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55494
+ intensiveZone: boolean().nullable(),
55495
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55496
+ varioSpeedPlus: boolean().nullable(),
55497
+ /** Child lock (controls disabled on the appliance); null when not known. */
55498
+ childLock: boolean().nullable(),
55499
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55500
+ activeEvents: array(string()),
55501
+ /** Numeric error code when the appliance reports one; null otherwise. */
55502
+ errorCode: number().nullable(),
55503
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55504
+ errorLabel: string().nullable(),
55505
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55506
+ lastFetchedAt: number()
55507
+ });
55508
+ var DeviceIdSchema = number().int().nonnegative();
55509
+ /** A value a program option or setting can take. */
55510
+ var DishwasherValueSchema = union([
55511
+ boolean(),
55512
+ string(),
55513
+ number()
55514
+ ]);
55515
+ var DishwasherAccessSchema = _enum([
55516
+ "none",
55517
+ "read",
55518
+ "readWrite",
55519
+ "writeOnly",
55520
+ "readStatic"
55521
+ ]);
55522
+ /**
55523
+ * One option or setting the appliance declares, with the constraints its description
55524
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55525
+ */
55526
+ var DishwasherOptionDescriptorSchema = object({
55527
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55528
+ key: string(),
55529
+ /** Last segment of the key, for display. */
55530
+ name: string(),
55531
+ type: _enum([
55532
+ "boolean",
55533
+ "number",
55534
+ "enum",
55535
+ "string"
55536
+ ]),
55537
+ access: DishwasherAccessSchema,
55538
+ /** The appliance reports this entity as currently available. */
55539
+ available: boolean(),
55540
+ /** Unit the description declares for a number; null when it declares none. */
55541
+ unit: string().nullable(),
55542
+ min: number().nullable(),
55543
+ max: number().nullable(),
55544
+ step: number().nullable(),
55545
+ /** Allowed members of an enum; null for other types. */
55546
+ enumValues: array(string()).nullable(),
55547
+ defaultValue: DishwasherValueSchema.nullable()
55548
+ });
55549
+ var DishwasherProgramSchema = object({
55550
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55551
+ key: string(),
55552
+ name: string(),
55553
+ /** The appliance currently offers this program. */
55554
+ available: boolean(),
55555
+ /** The options this program lists, with the program-level access / availability / default. */
55556
+ options: array(DishwasherOptionDescriptorSchema)
55557
+ });
55558
+ var DishwasherOptionsSchema = object({
55559
+ availability: DishwasherAvailabilitySchema,
55560
+ /** What the appliance can be told to do, from the commands its description declares. */
55561
+ supportsStart: boolean(),
55562
+ supportsPause: boolean(),
55563
+ supportsResume: boolean(),
55564
+ supportsStop: boolean(),
55565
+ supportsPower: boolean(),
55566
+ /** Every program the description lists, with its options. */
55567
+ programs: array(DishwasherProgramSchema),
55568
+ /** Every option and setting entity the description lists (programs reference these by key). */
55569
+ options: array(DishwasherOptionDescriptorSchema)
55570
+ });
55571
+ var dishwasherCapability = {
55572
+ name: "dishwasher",
55573
+ scope: "device",
55574
+ deviceNative: true,
55575
+ mode: "singleton",
55576
+ deviceTypes: [DeviceType.Dishwasher],
55577
+ methods: {
55578
+ /**
55579
+ * Start a program. Without `program` the selected one starts. `options` are
55580
+ * option feature keys; each is checked against the program's constraints.
55581
+ */
55582
+ start: method(object({
55583
+ deviceId: DeviceIdSchema,
55584
+ program: string().min(1).optional(),
55585
+ options: record(string(), DishwasherValueSchema).optional()
55586
+ }), _void(), {
55587
+ kind: "mutation",
55588
+ auth: "protected"
55589
+ }),
55590
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55591
+ kind: "mutation",
55592
+ auth: "protected"
55593
+ }),
55594
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55595
+ kind: "mutation",
55596
+ auth: "protected"
55597
+ }),
55598
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55599
+ kind: "mutation",
55600
+ auth: "protected"
55601
+ }),
55602
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55603
+ setProgram: method(object({
55604
+ deviceId: DeviceIdSchema,
55605
+ program: string().min(1)
55606
+ }), _void(), {
55607
+ kind: "mutation",
55608
+ auth: "protected"
55609
+ }),
55610
+ setPower: method(object({
55611
+ deviceId: DeviceIdSchema,
55612
+ on: boolean()
55613
+ }), _void(), {
55614
+ kind: "mutation",
55615
+ auth: "protected"
55616
+ }),
55617
+ setHalfLoad: method(object({
55618
+ deviceId: DeviceIdSchema,
55619
+ on: boolean()
55620
+ }), _void(), {
55621
+ kind: "mutation",
55622
+ auth: "protected"
55623
+ }),
55624
+ setHygienePlus: method(object({
55625
+ deviceId: DeviceIdSchema,
55626
+ on: boolean()
55627
+ }), _void(), {
55628
+ kind: "mutation",
55629
+ auth: "protected"
55630
+ }),
55631
+ setExtraDry: method(object({
55632
+ deviceId: DeviceIdSchema,
55633
+ on: boolean()
55634
+ }), _void(), {
55635
+ kind: "mutation",
55636
+ auth: "protected"
55637
+ }),
55638
+ setIntensiveZone: method(object({
55639
+ deviceId: DeviceIdSchema,
55640
+ on: boolean()
55641
+ }), _void(), {
55642
+ kind: "mutation",
55643
+ auth: "protected"
55644
+ }),
55645
+ setVarioSpeedPlus: method(object({
55646
+ deviceId: DeviceIdSchema,
55647
+ on: boolean()
55648
+ }), _void(), {
55649
+ kind: "mutation",
55650
+ auth: "protected"
55651
+ }),
55652
+ setChildLock: method(object({
55653
+ deviceId: DeviceIdSchema,
55654
+ on: boolean()
55655
+ }), _void(), {
55656
+ kind: "mutation",
55657
+ auth: "protected"
55658
+ }),
55659
+ /**
55660
+ * Write any option or setting by feature key. Refused when the description does
55661
+ * not list it, it is not writable or not available now, or the value is outside
55662
+ * its declared range / members.
55663
+ */
55664
+ setOption: method(object({
55665
+ deviceId: DeviceIdSchema,
55666
+ key: string().min(1),
55667
+ value: DishwasherValueSchema
55668
+ }), _void(), {
55669
+ kind: "mutation",
55670
+ auth: "protected"
55671
+ }),
55672
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55673
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55674
+ },
55675
+ status: {
55676
+ schema: DishwasherStatusSchema,
55677
+ kind: "poll"
55678
+ },
55679
+ runtimeState: DishwasherStatusSchema,
55680
+ durability: "session",
55681
+ history: { fields: { progressPercent: {
55682
+ kind: "gauge",
55683
+ unit: "%",
55684
+ deadband: 2
55685
+ } } }
55686
+ };
55362
55687
  var DoorbellStatusSchema = object({
55363
55688
  /** Ms epoch of the last press. null = never observed since this provider started. */
55364
55689
  lastPressedAt: number().nullable(),
@@ -56161,6 +56486,32 @@ var gasCapability = {
56161
56486
  * whether persisting is worth a SQLite commit. */
56162
56487
  volatileStateFields: ["lastChangedAt"]
56163
56488
  };
56489
+ var HeatingValveStatusSchema = object({
56490
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56491
+ position: number().min(0).max(100).nullable(),
56492
+ /** Ms epoch when the slice was last updated (push or poll). */
56493
+ lastFetchedAt: number()
56494
+ });
56495
+ var heatingValveCapability = {
56496
+ name: "heating-valve",
56497
+ scope: "device",
56498
+ deviceNative: true,
56499
+ mode: "singleton",
56500
+ deviceTypes: [DeviceType.Thermostat],
56501
+ methods: {},
56502
+ status: {
56503
+ schema: HeatingValveStatusSchema,
56504
+ kind: "push"
56505
+ },
56506
+ runtimeState: HeatingValveStatusSchema,
56507
+ durability: "session",
56508
+ history: { fields: { position: {
56509
+ kind: "gauge",
56510
+ unit: "%",
56511
+ deadband: 1
56512
+ } } },
56513
+ volatileStateFields: ["lastFetchedAt"]
56514
+ };
56164
56515
  /**
56165
56516
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56166
56517
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65581,6 +65932,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65581
65932
  dayNight: dayNightCapability,
65582
65933
  deviceDiscovery: deviceDiscoveryCapability,
65583
65934
  deviceStatus: deviceStatusCapability,
65935
+ dishwasher: dishwasherCapability,
65584
65936
  doorbell: doorbellCapability,
65585
65937
  enumSensor: enumSensorCapability,
65586
65938
  eventEmitter: eventEmitterCapability,
@@ -65588,6 +65940,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65588
65940
  featureProbe: featureProbeCapability,
65589
65941
  flood: floodCapability,
65590
65942
  gas: gasCapability,
65943
+ heatingValve: heatingValveCapability,
65591
65944
  humidifier: humidifierCapability,
65592
65945
  humiditySensor: humiditySensorCapability,
65593
65946
  image: imageCapability,
@@ -66362,7 +66715,7 @@ var DeclaredDevices = class {
66362
66715
  return removed;
66363
66716
  }
66364
66717
  };
66365
- DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
66718
+ DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
66366
66719
  new Set(Object.values(DeviceType));
66367
66720
  Object.freeze({
66368
66721
  "accessories.getStatus": {
@@ -68783,6 +69136,96 @@ Object.freeze({
68783
69136
  addonId: null,
68784
69137
  access: "view"
68785
69138
  },
69139
+ "dishwasher.getOptions": {
69140
+ capName: "dishwasher",
69141
+ capScope: "device",
69142
+ addonId: null,
69143
+ access: "view"
69144
+ },
69145
+ "dishwasher.getStatus": {
69146
+ capName: "dishwasher",
69147
+ capScope: "device",
69148
+ addonId: null,
69149
+ access: "view"
69150
+ },
69151
+ "dishwasher.pause": {
69152
+ capName: "dishwasher",
69153
+ capScope: "device",
69154
+ addonId: null,
69155
+ access: "create"
69156
+ },
69157
+ "dishwasher.resume": {
69158
+ capName: "dishwasher",
69159
+ capScope: "device",
69160
+ addonId: null,
69161
+ access: "create"
69162
+ },
69163
+ "dishwasher.setChildLock": {
69164
+ capName: "dishwasher",
69165
+ capScope: "device",
69166
+ addonId: null,
69167
+ access: "create"
69168
+ },
69169
+ "dishwasher.setExtraDry": {
69170
+ capName: "dishwasher",
69171
+ capScope: "device",
69172
+ addonId: null,
69173
+ access: "create"
69174
+ },
69175
+ "dishwasher.setHalfLoad": {
69176
+ capName: "dishwasher",
69177
+ capScope: "device",
69178
+ addonId: null,
69179
+ access: "create"
69180
+ },
69181
+ "dishwasher.setHygienePlus": {
69182
+ capName: "dishwasher",
69183
+ capScope: "device",
69184
+ addonId: null,
69185
+ access: "create"
69186
+ },
69187
+ "dishwasher.setIntensiveZone": {
69188
+ capName: "dishwasher",
69189
+ capScope: "device",
69190
+ addonId: null,
69191
+ access: "create"
69192
+ },
69193
+ "dishwasher.setOption": {
69194
+ capName: "dishwasher",
69195
+ capScope: "device",
69196
+ addonId: null,
69197
+ access: "create"
69198
+ },
69199
+ "dishwasher.setPower": {
69200
+ capName: "dishwasher",
69201
+ capScope: "device",
69202
+ addonId: null,
69203
+ access: "create"
69204
+ },
69205
+ "dishwasher.setProgram": {
69206
+ capName: "dishwasher",
69207
+ capScope: "device",
69208
+ addonId: null,
69209
+ access: "create"
69210
+ },
69211
+ "dishwasher.setVarioSpeedPlus": {
69212
+ capName: "dishwasher",
69213
+ capScope: "device",
69214
+ addonId: null,
69215
+ access: "create"
69216
+ },
69217
+ "dishwasher.start": {
69218
+ capName: "dishwasher",
69219
+ capScope: "device",
69220
+ addonId: null,
69221
+ access: "create"
69222
+ },
69223
+ "dishwasher.stop": {
69224
+ capName: "dishwasher",
69225
+ capScope: "device",
69226
+ addonId: null,
69227
+ access: "create"
69228
+ },
68786
69229
  "doorbell.getStatus": {
68787
69230
  capName: "doorbell",
68788
69231
  capScope: "device",
@@ -68993,6 +69436,12 @@ Object.freeze({
68993
69436
  addonId: null,
68994
69437
  access: "view"
68995
69438
  },
69439
+ "heatingValve.getStatus": {
69440
+ capName: "heating-valve",
69441
+ capScope: "device",
69442
+ addonId: null,
69443
+ access: "view"
69444
+ },
68996
69445
  "humidifier.getStatus": {
68997
69446
  capName: "humidifier",
68998
69447
  capScope: "device",
@@ -73211,6 +73660,12 @@ Object.freeze({
73211
73660
  addonId: null,
73212
73661
  access: "view"
73213
73662
  },
73663
+ "storageMigration.moverClearance": {
73664
+ capName: "storage-migration",
73665
+ capScope: "system",
73666
+ addonId: null,
73667
+ access: "view"
73668
+ },
73214
73669
  "storageMigration.movers": {
73215
73670
  capName: "storage-migration",
73216
73671
  capScope: "system",
@@ -74580,7 +75035,7 @@ Object.freeze({
74580
75035
  access: "create"
74581
75036
  }
74582
75037
  });
74583
- DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
75038
+ DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
74584
75039
  DeviceFeature.BatteryOperated;
74585
75040
  Object.freeze({
74586
75041
  "accessories.getStatus": [{
@@ -75404,6 +75859,81 @@ Object.freeze({
75404
75859
  form: "single",
75405
75860
  optional: false
75406
75861
  }],
75862
+ "dishwasher.getOptions": [{
75863
+ name: "deviceId",
75864
+ form: "single",
75865
+ optional: false
75866
+ }],
75867
+ "dishwasher.getStatus": [{
75868
+ name: "deviceId",
75869
+ form: "single",
75870
+ optional: false
75871
+ }],
75872
+ "dishwasher.pause": [{
75873
+ name: "deviceId",
75874
+ form: "single",
75875
+ optional: false
75876
+ }],
75877
+ "dishwasher.resume": [{
75878
+ name: "deviceId",
75879
+ form: "single",
75880
+ optional: false
75881
+ }],
75882
+ "dishwasher.setChildLock": [{
75883
+ name: "deviceId",
75884
+ form: "single",
75885
+ optional: false
75886
+ }],
75887
+ "dishwasher.setExtraDry": [{
75888
+ name: "deviceId",
75889
+ form: "single",
75890
+ optional: false
75891
+ }],
75892
+ "dishwasher.setHalfLoad": [{
75893
+ name: "deviceId",
75894
+ form: "single",
75895
+ optional: false
75896
+ }],
75897
+ "dishwasher.setHygienePlus": [{
75898
+ name: "deviceId",
75899
+ form: "single",
75900
+ optional: false
75901
+ }],
75902
+ "dishwasher.setIntensiveZone": [{
75903
+ name: "deviceId",
75904
+ form: "single",
75905
+ optional: false
75906
+ }],
75907
+ "dishwasher.setOption": [{
75908
+ name: "deviceId",
75909
+ form: "single",
75910
+ optional: false
75911
+ }],
75912
+ "dishwasher.setPower": [{
75913
+ name: "deviceId",
75914
+ form: "single",
75915
+ optional: false
75916
+ }],
75917
+ "dishwasher.setProgram": [{
75918
+ name: "deviceId",
75919
+ form: "single",
75920
+ optional: false
75921
+ }],
75922
+ "dishwasher.setVarioSpeedPlus": [{
75923
+ name: "deviceId",
75924
+ form: "single",
75925
+ optional: false
75926
+ }],
75927
+ "dishwasher.start": [{
75928
+ name: "deviceId",
75929
+ form: "single",
75930
+ optional: false
75931
+ }],
75932
+ "dishwasher.stop": [{
75933
+ name: "deviceId",
75934
+ form: "single",
75935
+ optional: false
75936
+ }],
75407
75937
  "doorbell.getStatus": [{
75408
75938
  name: "deviceId",
75409
75939
  form: "single",
@@ -75473,6 +76003,11 @@ Object.freeze({
75473
76003
  form: "single",
75474
76004
  optional: false
75475
76005
  }],
76006
+ "heatingValve.getStatus": [{
76007
+ name: "deviceId",
76008
+ form: "single",
76009
+ optional: false
76010
+ }],
75476
76011
  "humidifier.getStatus": [{
75477
76012
  name: "deviceId",
75478
76013
  form: "single",
@@ -77430,6 +77965,9 @@ new Map(Object.entries({
77430
77965
  "wrapper-update-available": "system",
77431
77966
  "backup-completed": "system",
77432
77967
  "export-completed": "system",
77968
+ "alert-critical": "system",
77969
+ "alert-error": "system",
77970
+ "alert-critical-resolved": "system",
77433
77971
  "storage-location-low": "system",
77434
77972
  "storage-location-critical": "system",
77435
77973
  "storage-location-ok": "system",
@@ -77554,6 +78092,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
77554
78092
  "storage-location-ok"
77555
78093
  ]
77556
78094
  },
78095
+ {
78096
+ id: "alerts",
78097
+ family: "system",
78098
+ label: "Alerts",
78099
+ kinds: [
78100
+ "alert-critical",
78101
+ "alert-error",
78102
+ "alert-critical-resolved"
78103
+ ]
78104
+ },
77557
78105
  {
77558
78106
  id: "alarm",
77559
78107
  family: "alarm",
@@ -77598,6 +78146,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
77598
78146
  return [[descriptor.kind, field]];
77599
78147
  })));
77600
78148
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78149
+ object({
78150
+ phase: _enum(["raised", "resolved"]),
78151
+ episodeId: string().min(1),
78152
+ alertId: string().min(1),
78153
+ severity: AlertSeveritySchema,
78154
+ category: string(),
78155
+ title: string(),
78156
+ message: string(),
78157
+ sourceType: string().optional(),
78158
+ sourceId: string().optional(),
78159
+ nodeId: string().optional(),
78160
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78161
+ actionUrl: string().optional(),
78162
+ at: number()
78163
+ });
77601
78164
  var RULE_BODY_ONLY = ["body"];
77602
78165
  var RULE_TEXT = ["title", "body"];
77603
78166
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -77607,6 +78170,11 @@ var TANK = [
77607
78170
  "device-tank-full",
77608
78171
  "device-tank-normal"
77609
78172
  ];
78173
+ var ALERT_EPISODE = [
78174
+ "alert-critical",
78175
+ "alert-error",
78176
+ "alert-critical-resolved"
78177
+ ];
77610
78178
  var UPDATES = [
77611
78179
  "addon-update-available",
77612
78180
  "server-update-available",
@@ -77799,14 +78367,14 @@ var STATE_SUMMARY_VARS = [
77799
78367
  ([...RULE_TEXT], [...CONSUMABLE]),
77800
78368
  ([...RULE_TEXT], [...TANK]),
77801
78369
  [...RULE_TEXT],
77802
- ([...RULE_TEXT], [...UPDATES]),
77803
- ([...RULE_TEXT], [...UPDATES]),
77804
- [...RULE_TEXT],
78370
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78371
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
77805
78372
  [...RULE_TEXT],
77806
78373
  [...RULE_TEXT],
77807
78374
  [...RULE_TEXT],
77808
78375
  [...RULE_TEXT],
77809
78376
  [...RULE_TEXT],
78377
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
77810
78378
  [...RULE_TEXT],
77811
78379
  [...RULE_TEXT],
77812
78380
  [...RULE_TEXT],
@@ -77824,7 +78392,11 @@ var STATE_SUMMARY_VARS = [
77824
78392
  [...RULE_TEXT],
77825
78393
  [...RULE_TEXT],
77826
78394
  [...RULE_TEXT],
77827
- [...RULE_TEXT],
78395
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78396
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78397
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78398
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78399
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
77828
78400
  [...RULE_TEXT],
77829
78401
  [...RULE_TEXT],
77830
78402
  [...RULE_TEXT],