@camstack/addon-terminal 0.1.133 → 0.1.134

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.
package/dist/addon.js CHANGED
@@ -5437,7 +5437,7 @@ var ZodIssueCode = {
5437
5437
  var ZodFirstPartyTypeKind;
5438
5438
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5439
5439
  //#endregion
5440
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5440
+ //#region ../types/dist/sleep-BegKjwUu.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).
@@ -8515,7 +8515,7 @@ object({
8515
8515
  params: record(string(), union([string(), number()])).optional()
8516
8516
  });
8517
8517
  //#endregion
8518
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8518
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8519
8519
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8520
8520
  DeviceType["Camera"] = "camera";
8521
8521
  DeviceType["Hub"] = "hub";
@@ -8607,6 +8607,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8607
8607
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8608
8608
  * integrations sharing the same food/desiccant/hopper surface. */
8609
8609
  DeviceType["PetFeeder"] = "pet-feeder";
8610
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8611
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8612
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8613
+ DeviceType["Dishwasher"] = "dishwasher";
8610
8614
  return DeviceType;
8611
8615
  }({});
8612
8616
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8864,7 +8868,7 @@ function errMsg(err) {
8864
8868
  return String(err);
8865
8869
  }
8866
8870
  //#endregion
8867
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8871
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8868
8872
  /**
8869
8873
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8870
8874
  *
@@ -13282,8 +13286,13 @@ var AlertSeveritySchema = _enum([
13282
13286
  "info",
13283
13287
  "success",
13284
13288
  "warning",
13285
- "error"
13289
+ "error",
13290
+ "critical"
13286
13291
  ]);
13292
+ var AlertActionSchema = object({
13293
+ label: string(),
13294
+ href: string().optional()
13295
+ });
13287
13296
  var AlertStatusSchema = _enum([
13288
13297
  "active",
13289
13298
  "in-progress",
@@ -13301,6 +13310,7 @@ var AlertSchema = object({
13301
13310
  severity: AlertSeveritySchema,
13302
13311
  title: string(),
13303
13312
  message: string(),
13313
+ action: AlertActionSchema.optional(),
13304
13314
  status: AlertStatusSchema,
13305
13315
  progress: number().optional(),
13306
13316
  read: boolean(),
@@ -17662,7 +17672,11 @@ var deviceDiscoveryCapability = {
17662
17672
  };
17663
17673
  /**
17664
17674
  * `device-adoption` — generic discovery + adoption surface,
17665
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17675
+ * system-scoped collection (one provider per integration addon), routed
17676
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17677
+ * pin model as `connection-test`. The admin UI keeps using
17678
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17679
+ * successor to `ha-discovery`:
17666
17680
  * keyed by `integrationId` (the addon resolves integrationId → broker
17667
17681
  * internally) rather than a connection-specific `brokerId`, and it
17668
17682
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -53909,7 +53923,8 @@ var batteryCapability = {
53909
53923
  DeviceType.Button,
53910
53924
  DeviceType.Switch,
53911
53925
  DeviceType.PetFeeder,
53912
- DeviceType.Container
53926
+ DeviceType.Container,
53927
+ DeviceType.Thermostat
53913
53928
  ],
53914
53929
  methods: {
53915
53930
  /**
@@ -55382,6 +55397,161 @@ onStatusChanged: { data: object({
55382
55397
  * whether persisting is worth a SQLite commit. */
55383
55398
  volatileStateFields: ["lastChangedAt"]
55384
55399
  };
55400
+ /**
55401
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55402
+ * consumable levels (salt, rinse aid) and common program options.
55403
+ *
55404
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55405
+ * by any integration that exposes the same program / option surface.
55406
+ *
55407
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55408
+ * provider refreshes the slice on an interval and eagerly after commands.
55409
+ */
55410
+ var DishwasherStateSchema = _enum([
55411
+ "idle",
55412
+ "running",
55413
+ "paused",
55414
+ "finished",
55415
+ "error",
55416
+ "unavailable"
55417
+ ]);
55418
+ var DishwasherConsumableLevelSchema = _enum([
55419
+ "ok",
55420
+ "low",
55421
+ "empty"
55422
+ ]);
55423
+ var DishwasherStatusSchema = object({
55424
+ state: DishwasherStateSchema,
55425
+ /** Active program id/name, or null when none selected / unknown. */
55426
+ program: string().nullable(),
55427
+ /** Program tokens the hardware accepts — drives the UI selector. */
55428
+ availablePrograms: array(string()),
55429
+ /** Minutes remaining on the active cycle, or null when not running. */
55430
+ remainingMinutes: number().int().nonnegative().nullable(),
55431
+ /** Cycle completion 0..100, or null when not applicable. */
55432
+ progressPercent: number().min(0).max(100).nullable(),
55433
+ /** True when the door is reported open. */
55434
+ doorOpen: boolean(),
55435
+ /** True when remote start is allowed (door closed, power on, etc.). */
55436
+ remoteStartAllowed: boolean(),
55437
+ /** Main power / switched-on state. */
55438
+ powerOn: boolean(),
55439
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55440
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55441
+ halfLoad: boolean(),
55442
+ hygienePlus: boolean(),
55443
+ /** Extra dry option when the appliance exposes it. */
55444
+ extraDry: boolean(),
55445
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55446
+ intensiveZone: boolean(),
55447
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55448
+ varioSpeedPlus: boolean(),
55449
+ /** Child lock (controls disabled on the appliance). */
55450
+ childLock: boolean(),
55451
+ errorCode: number().nullable(),
55452
+ errorLabel: string().nullable(),
55453
+ lastFetchedAt: number()
55454
+ });
55455
+ var dishwasherCapability = {
55456
+ name: "dishwasher",
55457
+ scope: "device",
55458
+ deviceNative: true,
55459
+ mode: "singleton",
55460
+ deviceTypes: [DeviceType.Dishwasher],
55461
+ methods: {
55462
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55463
+ kind: "mutation",
55464
+ auth: "protected"
55465
+ }),
55466
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55467
+ kind: "mutation",
55468
+ auth: "protected"
55469
+ }),
55470
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55471
+ kind: "mutation",
55472
+ auth: "protected"
55473
+ }),
55474
+ setProgram: method(object({
55475
+ deviceId: number().int().nonnegative(),
55476
+ program: string().min(1)
55477
+ }), _void(), {
55478
+ kind: "mutation",
55479
+ auth: "protected"
55480
+ }),
55481
+ setPower: method(object({
55482
+ deviceId: number().int().nonnegative(),
55483
+ on: boolean()
55484
+ }), _void(), {
55485
+ kind: "mutation",
55486
+ auth: "protected"
55487
+ }),
55488
+ setHalfLoad: method(object({
55489
+ deviceId: number().int().nonnegative(),
55490
+ on: boolean()
55491
+ }), _void(), {
55492
+ kind: "mutation",
55493
+ auth: "protected"
55494
+ }),
55495
+ setHygienePlus: method(object({
55496
+ deviceId: number().int().nonnegative(),
55497
+ on: boolean()
55498
+ }), _void(), {
55499
+ kind: "mutation",
55500
+ auth: "protected"
55501
+ }),
55502
+ setExtraDry: method(object({
55503
+ deviceId: number().int().nonnegative(),
55504
+ on: boolean()
55505
+ }), _void(), {
55506
+ kind: "mutation",
55507
+ auth: "protected"
55508
+ }),
55509
+ setIntensiveZone: method(object({
55510
+ deviceId: number().int().nonnegative(),
55511
+ on: boolean()
55512
+ }), _void(), {
55513
+ kind: "mutation",
55514
+ auth: "protected"
55515
+ }),
55516
+ setVarioSpeedPlus: method(object({
55517
+ deviceId: number().int().nonnegative(),
55518
+ on: boolean()
55519
+ }), _void(), {
55520
+ kind: "mutation",
55521
+ auth: "protected"
55522
+ }),
55523
+ setChildLock: method(object({
55524
+ deviceId: number().int().nonnegative(),
55525
+ on: boolean()
55526
+ }), _void(), {
55527
+ kind: "mutation",
55528
+ auth: "protected"
55529
+ }),
55530
+ setOption: method(object({
55531
+ deviceId: number().int().nonnegative(),
55532
+ key: string().min(1),
55533
+ value: union([
55534
+ boolean(),
55535
+ string(),
55536
+ number()
55537
+ ])
55538
+ }), _void(), {
55539
+ kind: "mutation",
55540
+ auth: "protected"
55541
+ })
55542
+ },
55543
+ status: {
55544
+ schema: DishwasherStatusSchema,
55545
+ kind: "poll"
55546
+ },
55547
+ runtimeState: DishwasherStatusSchema,
55548
+ durability: "session",
55549
+ history: { fields: { progressPercent: {
55550
+ kind: "gauge",
55551
+ unit: "%",
55552
+ deadband: 2
55553
+ } } }
55554
+ };
55385
55555
  var DoorbellStatusSchema = object({
55386
55556
  /** Ms epoch of the last press. null = never observed since this provider started. */
55387
55557
  lastPressedAt: number().nullable(),
@@ -56184,6 +56354,32 @@ var gasCapability = {
56184
56354
  * whether persisting is worth a SQLite commit. */
56185
56355
  volatileStateFields: ["lastChangedAt"]
56186
56356
  };
56357
+ var HeatingValveStatusSchema = object({
56358
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56359
+ position: number().min(0).max(100).nullable(),
56360
+ /** Ms epoch when the slice was last updated (push or poll). */
56361
+ lastFetchedAt: number()
56362
+ });
56363
+ var heatingValveCapability = {
56364
+ name: "heating-valve",
56365
+ scope: "device",
56366
+ deviceNative: true,
56367
+ mode: "singleton",
56368
+ deviceTypes: [DeviceType.Thermostat],
56369
+ methods: {},
56370
+ status: {
56371
+ schema: HeatingValveStatusSchema,
56372
+ kind: "push"
56373
+ },
56374
+ runtimeState: HeatingValveStatusSchema,
56375
+ durability: "session",
56376
+ history: { fields: { position: {
56377
+ kind: "gauge",
56378
+ unit: "%",
56379
+ deadband: 1
56380
+ } } },
56381
+ volatileStateFields: ["lastFetchedAt"]
56382
+ };
56187
56383
  /**
56188
56384
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56189
56385
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65604,6 +65800,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65604
65800
  dayNight: dayNightCapability,
65605
65801
  deviceDiscovery: deviceDiscoveryCapability,
65606
65802
  deviceStatus: deviceStatusCapability,
65803
+ dishwasher: dishwasherCapability,
65607
65804
  doorbell: doorbellCapability,
65608
65805
  enumSensor: enumSensorCapability,
65609
65806
  eventEmitter: eventEmitterCapability,
@@ -65611,6 +65808,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65611
65808
  featureProbe: featureProbeCapability,
65612
65809
  flood: floodCapability,
65613
65810
  gas: gasCapability,
65811
+ heatingValve: heatingValveCapability,
65614
65812
  humidifier: humidifierCapability,
65615
65813
  humiditySensor: humiditySensorCapability,
65616
65814
  image: imageCapability,
@@ -66385,7 +66583,7 @@ var DeclaredDevices = class {
66385
66583
  return removed;
66386
66584
  }
66387
66585
  };
66388
- 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;
66586
+ 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;
66389
66587
  new Set(Object.values(DeviceType));
66390
66588
  Object.freeze({
66391
66589
  "accessories.getStatus": {
@@ -68806,6 +69004,84 @@ Object.freeze({
68806
69004
  addonId: null,
68807
69005
  access: "view"
68808
69006
  },
69007
+ "dishwasher.getStatus": {
69008
+ capName: "dishwasher",
69009
+ capScope: "device",
69010
+ addonId: null,
69011
+ access: "view"
69012
+ },
69013
+ "dishwasher.pause": {
69014
+ capName: "dishwasher",
69015
+ capScope: "device",
69016
+ addonId: null,
69017
+ access: "create"
69018
+ },
69019
+ "dishwasher.setChildLock": {
69020
+ capName: "dishwasher",
69021
+ capScope: "device",
69022
+ addonId: null,
69023
+ access: "create"
69024
+ },
69025
+ "dishwasher.setExtraDry": {
69026
+ capName: "dishwasher",
69027
+ capScope: "device",
69028
+ addonId: null,
69029
+ access: "create"
69030
+ },
69031
+ "dishwasher.setHalfLoad": {
69032
+ capName: "dishwasher",
69033
+ capScope: "device",
69034
+ addonId: null,
69035
+ access: "create"
69036
+ },
69037
+ "dishwasher.setHygienePlus": {
69038
+ capName: "dishwasher",
69039
+ capScope: "device",
69040
+ addonId: null,
69041
+ access: "create"
69042
+ },
69043
+ "dishwasher.setIntensiveZone": {
69044
+ capName: "dishwasher",
69045
+ capScope: "device",
69046
+ addonId: null,
69047
+ access: "create"
69048
+ },
69049
+ "dishwasher.setOption": {
69050
+ capName: "dishwasher",
69051
+ capScope: "device",
69052
+ addonId: null,
69053
+ access: "create"
69054
+ },
69055
+ "dishwasher.setPower": {
69056
+ capName: "dishwasher",
69057
+ capScope: "device",
69058
+ addonId: null,
69059
+ access: "create"
69060
+ },
69061
+ "dishwasher.setProgram": {
69062
+ capName: "dishwasher",
69063
+ capScope: "device",
69064
+ addonId: null,
69065
+ access: "create"
69066
+ },
69067
+ "dishwasher.setVarioSpeedPlus": {
69068
+ capName: "dishwasher",
69069
+ capScope: "device",
69070
+ addonId: null,
69071
+ access: "create"
69072
+ },
69073
+ "dishwasher.start": {
69074
+ capName: "dishwasher",
69075
+ capScope: "device",
69076
+ addonId: null,
69077
+ access: "create"
69078
+ },
69079
+ "dishwasher.stop": {
69080
+ capName: "dishwasher",
69081
+ capScope: "device",
69082
+ addonId: null,
69083
+ access: "create"
69084
+ },
68809
69085
  "doorbell.getStatus": {
68810
69086
  capName: "doorbell",
68811
69087
  capScope: "device",
@@ -69016,6 +69292,12 @@ Object.freeze({
69016
69292
  addonId: null,
69017
69293
  access: "view"
69018
69294
  },
69295
+ "heatingValve.getStatus": {
69296
+ capName: "heating-valve",
69297
+ capScope: "device",
69298
+ addonId: null,
69299
+ access: "view"
69300
+ },
69019
69301
  "humidifier.getStatus": {
69020
69302
  capName: "humidifier",
69021
69303
  capScope: "device",
@@ -74603,7 +74885,7 @@ Object.freeze({
74603
74885
  access: "create"
74604
74886
  }
74605
74887
  });
74606
- 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;
74888
+ 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;
74607
74889
  DeviceFeature.BatteryOperated;
74608
74890
  Object.freeze({
74609
74891
  "accessories.getStatus": [{
@@ -75427,6 +75709,71 @@ Object.freeze({
75427
75709
  form: "single",
75428
75710
  optional: false
75429
75711
  }],
75712
+ "dishwasher.getStatus": [{
75713
+ name: "deviceId",
75714
+ form: "single",
75715
+ optional: false
75716
+ }],
75717
+ "dishwasher.pause": [{
75718
+ name: "deviceId",
75719
+ form: "single",
75720
+ optional: false
75721
+ }],
75722
+ "dishwasher.setChildLock": [{
75723
+ name: "deviceId",
75724
+ form: "single",
75725
+ optional: false
75726
+ }],
75727
+ "dishwasher.setExtraDry": [{
75728
+ name: "deviceId",
75729
+ form: "single",
75730
+ optional: false
75731
+ }],
75732
+ "dishwasher.setHalfLoad": [{
75733
+ name: "deviceId",
75734
+ form: "single",
75735
+ optional: false
75736
+ }],
75737
+ "dishwasher.setHygienePlus": [{
75738
+ name: "deviceId",
75739
+ form: "single",
75740
+ optional: false
75741
+ }],
75742
+ "dishwasher.setIntensiveZone": [{
75743
+ name: "deviceId",
75744
+ form: "single",
75745
+ optional: false
75746
+ }],
75747
+ "dishwasher.setOption": [{
75748
+ name: "deviceId",
75749
+ form: "single",
75750
+ optional: false
75751
+ }],
75752
+ "dishwasher.setPower": [{
75753
+ name: "deviceId",
75754
+ form: "single",
75755
+ optional: false
75756
+ }],
75757
+ "dishwasher.setProgram": [{
75758
+ name: "deviceId",
75759
+ form: "single",
75760
+ optional: false
75761
+ }],
75762
+ "dishwasher.setVarioSpeedPlus": [{
75763
+ name: "deviceId",
75764
+ form: "single",
75765
+ optional: false
75766
+ }],
75767
+ "dishwasher.start": [{
75768
+ name: "deviceId",
75769
+ form: "single",
75770
+ optional: false
75771
+ }],
75772
+ "dishwasher.stop": [{
75773
+ name: "deviceId",
75774
+ form: "single",
75775
+ optional: false
75776
+ }],
75430
75777
  "doorbell.getStatus": [{
75431
75778
  name: "deviceId",
75432
75779
  form: "single",
@@ -75496,6 +75843,11 @@ Object.freeze({
75496
75843
  form: "single",
75497
75844
  optional: false
75498
75845
  }],
75846
+ "heatingValve.getStatus": [{
75847
+ name: "deviceId",
75848
+ form: "single",
75849
+ optional: false
75850
+ }],
75499
75851
  "humidifier.getStatus": [{
75500
75852
  name: "deviceId",
75501
75853
  form: "single",
package/dist/addon.mjs CHANGED
@@ -5414,7 +5414,7 @@ var ZodIssueCode = {
5414
5414
  var ZodFirstPartyTypeKind;
5415
5415
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5416
5416
  //#endregion
5417
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5417
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5418
5418
  /**
5419
5419
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5420
5420
  * window to float samples (D455).
@@ -8492,7 +8492,7 @@ object({
8492
8492
  params: record(string(), union([string(), number()])).optional()
8493
8493
  });
8494
8494
  //#endregion
8495
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8495
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8496
8496
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8497
8497
  DeviceType["Camera"] = "camera";
8498
8498
  DeviceType["Hub"] = "hub";
@@ -8584,6 +8584,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8584
8584
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8585
8585
  * integrations sharing the same food/desiccant/hopper surface. */
8586
8586
  DeviceType["PetFeeder"] = "pet-feeder";
8587
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8588
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8589
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8590
+ DeviceType["Dishwasher"] = "dishwasher";
8587
8591
  return DeviceType;
8588
8592
  }({});
8589
8593
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8841,7 +8845,7 @@ function errMsg(err) {
8841
8845
  return String(err);
8842
8846
  }
8843
8847
  //#endregion
8844
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8848
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8845
8849
  /**
8846
8850
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8847
8851
  *
@@ -13259,8 +13263,13 @@ var AlertSeveritySchema = _enum([
13259
13263
  "info",
13260
13264
  "success",
13261
13265
  "warning",
13262
- "error"
13266
+ "error",
13267
+ "critical"
13263
13268
  ]);
13269
+ var AlertActionSchema = object({
13270
+ label: string(),
13271
+ href: string().optional()
13272
+ });
13264
13273
  var AlertStatusSchema = _enum([
13265
13274
  "active",
13266
13275
  "in-progress",
@@ -13278,6 +13287,7 @@ var AlertSchema = object({
13278
13287
  severity: AlertSeveritySchema,
13279
13288
  title: string(),
13280
13289
  message: string(),
13290
+ action: AlertActionSchema.optional(),
13281
13291
  status: AlertStatusSchema,
13282
13292
  progress: number().optional(),
13283
13293
  read: boolean(),
@@ -17639,7 +17649,11 @@ var deviceDiscoveryCapability = {
17639
17649
  };
17640
17650
  /**
17641
17651
  * `device-adoption` — generic discovery + adoption surface,
17642
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17652
+ * system-scoped collection (one provider per integration addon), routed
17653
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17654
+ * pin model as `connection-test`. The admin UI keeps using
17655
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17656
+ * successor to `ha-discovery`:
17643
17657
  * keyed by `integrationId` (the addon resolves integrationId → broker
17644
17658
  * internally) rather than a connection-specific `brokerId`, and it
17645
17659
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -53886,7 +53900,8 @@ var batteryCapability = {
53886
53900
  DeviceType.Button,
53887
53901
  DeviceType.Switch,
53888
53902
  DeviceType.PetFeeder,
53889
- DeviceType.Container
53903
+ DeviceType.Container,
53904
+ DeviceType.Thermostat
53890
53905
  ],
53891
53906
  methods: {
53892
53907
  /**
@@ -55359,6 +55374,161 @@ onStatusChanged: { data: object({
55359
55374
  * whether persisting is worth a SQLite commit. */
55360
55375
  volatileStateFields: ["lastChangedAt"]
55361
55376
  };
55377
+ /**
55378
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55379
+ * consumable levels (salt, rinse aid) and common program options.
55380
+ *
55381
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55382
+ * by any integration that exposes the same program / option surface.
55383
+ *
55384
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55385
+ * provider refreshes the slice on an interval and eagerly after commands.
55386
+ */
55387
+ var DishwasherStateSchema = _enum([
55388
+ "idle",
55389
+ "running",
55390
+ "paused",
55391
+ "finished",
55392
+ "error",
55393
+ "unavailable"
55394
+ ]);
55395
+ var DishwasherConsumableLevelSchema = _enum([
55396
+ "ok",
55397
+ "low",
55398
+ "empty"
55399
+ ]);
55400
+ var DishwasherStatusSchema = object({
55401
+ state: DishwasherStateSchema,
55402
+ /** Active program id/name, or null when none selected / unknown. */
55403
+ program: string().nullable(),
55404
+ /** Program tokens the hardware accepts — drives the UI selector. */
55405
+ availablePrograms: array(string()),
55406
+ /** Minutes remaining on the active cycle, or null when not running. */
55407
+ remainingMinutes: number().int().nonnegative().nullable(),
55408
+ /** Cycle completion 0..100, or null when not applicable. */
55409
+ progressPercent: number().min(0).max(100).nullable(),
55410
+ /** True when the door is reported open. */
55411
+ doorOpen: boolean(),
55412
+ /** True when remote start is allowed (door closed, power on, etc.). */
55413
+ remoteStartAllowed: boolean(),
55414
+ /** Main power / switched-on state. */
55415
+ powerOn: boolean(),
55416
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55417
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55418
+ halfLoad: boolean(),
55419
+ hygienePlus: boolean(),
55420
+ /** Extra dry option when the appliance exposes it. */
55421
+ extraDry: boolean(),
55422
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55423
+ intensiveZone: boolean(),
55424
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55425
+ varioSpeedPlus: boolean(),
55426
+ /** Child lock (controls disabled on the appliance). */
55427
+ childLock: boolean(),
55428
+ errorCode: number().nullable(),
55429
+ errorLabel: string().nullable(),
55430
+ lastFetchedAt: number()
55431
+ });
55432
+ var dishwasherCapability = {
55433
+ name: "dishwasher",
55434
+ scope: "device",
55435
+ deviceNative: true,
55436
+ mode: "singleton",
55437
+ deviceTypes: [DeviceType.Dishwasher],
55438
+ methods: {
55439
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55440
+ kind: "mutation",
55441
+ auth: "protected"
55442
+ }),
55443
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55444
+ kind: "mutation",
55445
+ auth: "protected"
55446
+ }),
55447
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55448
+ kind: "mutation",
55449
+ auth: "protected"
55450
+ }),
55451
+ setProgram: method(object({
55452
+ deviceId: number().int().nonnegative(),
55453
+ program: string().min(1)
55454
+ }), _void(), {
55455
+ kind: "mutation",
55456
+ auth: "protected"
55457
+ }),
55458
+ setPower: method(object({
55459
+ deviceId: number().int().nonnegative(),
55460
+ on: boolean()
55461
+ }), _void(), {
55462
+ kind: "mutation",
55463
+ auth: "protected"
55464
+ }),
55465
+ setHalfLoad: method(object({
55466
+ deviceId: number().int().nonnegative(),
55467
+ on: boolean()
55468
+ }), _void(), {
55469
+ kind: "mutation",
55470
+ auth: "protected"
55471
+ }),
55472
+ setHygienePlus: method(object({
55473
+ deviceId: number().int().nonnegative(),
55474
+ on: boolean()
55475
+ }), _void(), {
55476
+ kind: "mutation",
55477
+ auth: "protected"
55478
+ }),
55479
+ setExtraDry: method(object({
55480
+ deviceId: number().int().nonnegative(),
55481
+ on: boolean()
55482
+ }), _void(), {
55483
+ kind: "mutation",
55484
+ auth: "protected"
55485
+ }),
55486
+ setIntensiveZone: method(object({
55487
+ deviceId: number().int().nonnegative(),
55488
+ on: boolean()
55489
+ }), _void(), {
55490
+ kind: "mutation",
55491
+ auth: "protected"
55492
+ }),
55493
+ setVarioSpeedPlus: method(object({
55494
+ deviceId: number().int().nonnegative(),
55495
+ on: boolean()
55496
+ }), _void(), {
55497
+ kind: "mutation",
55498
+ auth: "protected"
55499
+ }),
55500
+ setChildLock: method(object({
55501
+ deviceId: number().int().nonnegative(),
55502
+ on: boolean()
55503
+ }), _void(), {
55504
+ kind: "mutation",
55505
+ auth: "protected"
55506
+ }),
55507
+ setOption: method(object({
55508
+ deviceId: number().int().nonnegative(),
55509
+ key: string().min(1),
55510
+ value: union([
55511
+ boolean(),
55512
+ string(),
55513
+ number()
55514
+ ])
55515
+ }), _void(), {
55516
+ kind: "mutation",
55517
+ auth: "protected"
55518
+ })
55519
+ },
55520
+ status: {
55521
+ schema: DishwasherStatusSchema,
55522
+ kind: "poll"
55523
+ },
55524
+ runtimeState: DishwasherStatusSchema,
55525
+ durability: "session",
55526
+ history: { fields: { progressPercent: {
55527
+ kind: "gauge",
55528
+ unit: "%",
55529
+ deadband: 2
55530
+ } } }
55531
+ };
55362
55532
  var DoorbellStatusSchema = object({
55363
55533
  /** Ms epoch of the last press. null = never observed since this provider started. */
55364
55534
  lastPressedAt: number().nullable(),
@@ -56161,6 +56331,32 @@ var gasCapability = {
56161
56331
  * whether persisting is worth a SQLite commit. */
56162
56332
  volatileStateFields: ["lastChangedAt"]
56163
56333
  };
56334
+ var HeatingValveStatusSchema = object({
56335
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56336
+ position: number().min(0).max(100).nullable(),
56337
+ /** Ms epoch when the slice was last updated (push or poll). */
56338
+ lastFetchedAt: number()
56339
+ });
56340
+ var heatingValveCapability = {
56341
+ name: "heating-valve",
56342
+ scope: "device",
56343
+ deviceNative: true,
56344
+ mode: "singleton",
56345
+ deviceTypes: [DeviceType.Thermostat],
56346
+ methods: {},
56347
+ status: {
56348
+ schema: HeatingValveStatusSchema,
56349
+ kind: "push"
56350
+ },
56351
+ runtimeState: HeatingValveStatusSchema,
56352
+ durability: "session",
56353
+ history: { fields: { position: {
56354
+ kind: "gauge",
56355
+ unit: "%",
56356
+ deadband: 1
56357
+ } } },
56358
+ volatileStateFields: ["lastFetchedAt"]
56359
+ };
56164
56360
  /**
56165
56361
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56166
56362
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65581,6 +65777,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65581
65777
  dayNight: dayNightCapability,
65582
65778
  deviceDiscovery: deviceDiscoveryCapability,
65583
65779
  deviceStatus: deviceStatusCapability,
65780
+ dishwasher: dishwasherCapability,
65584
65781
  doorbell: doorbellCapability,
65585
65782
  enumSensor: enumSensorCapability,
65586
65783
  eventEmitter: eventEmitterCapability,
@@ -65588,6 +65785,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65588
65785
  featureProbe: featureProbeCapability,
65589
65786
  flood: floodCapability,
65590
65787
  gas: gasCapability,
65788
+ heatingValve: heatingValveCapability,
65591
65789
  humidifier: humidifierCapability,
65592
65790
  humiditySensor: humiditySensorCapability,
65593
65791
  image: imageCapability,
@@ -66362,7 +66560,7 @@ var DeclaredDevices = class {
66362
66560
  return removed;
66363
66561
  }
66364
66562
  };
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;
66563
+ 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
66564
  new Set(Object.values(DeviceType));
66367
66565
  Object.freeze({
66368
66566
  "accessories.getStatus": {
@@ -68783,6 +68981,84 @@ Object.freeze({
68783
68981
  addonId: null,
68784
68982
  access: "view"
68785
68983
  },
68984
+ "dishwasher.getStatus": {
68985
+ capName: "dishwasher",
68986
+ capScope: "device",
68987
+ addonId: null,
68988
+ access: "view"
68989
+ },
68990
+ "dishwasher.pause": {
68991
+ capName: "dishwasher",
68992
+ capScope: "device",
68993
+ addonId: null,
68994
+ access: "create"
68995
+ },
68996
+ "dishwasher.setChildLock": {
68997
+ capName: "dishwasher",
68998
+ capScope: "device",
68999
+ addonId: null,
69000
+ access: "create"
69001
+ },
69002
+ "dishwasher.setExtraDry": {
69003
+ capName: "dishwasher",
69004
+ capScope: "device",
69005
+ addonId: null,
69006
+ access: "create"
69007
+ },
69008
+ "dishwasher.setHalfLoad": {
69009
+ capName: "dishwasher",
69010
+ capScope: "device",
69011
+ addonId: null,
69012
+ access: "create"
69013
+ },
69014
+ "dishwasher.setHygienePlus": {
69015
+ capName: "dishwasher",
69016
+ capScope: "device",
69017
+ addonId: null,
69018
+ access: "create"
69019
+ },
69020
+ "dishwasher.setIntensiveZone": {
69021
+ capName: "dishwasher",
69022
+ capScope: "device",
69023
+ addonId: null,
69024
+ access: "create"
69025
+ },
69026
+ "dishwasher.setOption": {
69027
+ capName: "dishwasher",
69028
+ capScope: "device",
69029
+ addonId: null,
69030
+ access: "create"
69031
+ },
69032
+ "dishwasher.setPower": {
69033
+ capName: "dishwasher",
69034
+ capScope: "device",
69035
+ addonId: null,
69036
+ access: "create"
69037
+ },
69038
+ "dishwasher.setProgram": {
69039
+ capName: "dishwasher",
69040
+ capScope: "device",
69041
+ addonId: null,
69042
+ access: "create"
69043
+ },
69044
+ "dishwasher.setVarioSpeedPlus": {
69045
+ capName: "dishwasher",
69046
+ capScope: "device",
69047
+ addonId: null,
69048
+ access: "create"
69049
+ },
69050
+ "dishwasher.start": {
69051
+ capName: "dishwasher",
69052
+ capScope: "device",
69053
+ addonId: null,
69054
+ access: "create"
69055
+ },
69056
+ "dishwasher.stop": {
69057
+ capName: "dishwasher",
69058
+ capScope: "device",
69059
+ addonId: null,
69060
+ access: "create"
69061
+ },
68786
69062
  "doorbell.getStatus": {
68787
69063
  capName: "doorbell",
68788
69064
  capScope: "device",
@@ -68993,6 +69269,12 @@ Object.freeze({
68993
69269
  addonId: null,
68994
69270
  access: "view"
68995
69271
  },
69272
+ "heatingValve.getStatus": {
69273
+ capName: "heating-valve",
69274
+ capScope: "device",
69275
+ addonId: null,
69276
+ access: "view"
69277
+ },
68996
69278
  "humidifier.getStatus": {
68997
69279
  capName: "humidifier",
68998
69280
  capScope: "device",
@@ -74580,7 +74862,7 @@ Object.freeze({
74580
74862
  access: "create"
74581
74863
  }
74582
74864
  });
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;
74865
+ 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
74866
  DeviceFeature.BatteryOperated;
74585
74867
  Object.freeze({
74586
74868
  "accessories.getStatus": [{
@@ -75404,6 +75686,71 @@ Object.freeze({
75404
75686
  form: "single",
75405
75687
  optional: false
75406
75688
  }],
75689
+ "dishwasher.getStatus": [{
75690
+ name: "deviceId",
75691
+ form: "single",
75692
+ optional: false
75693
+ }],
75694
+ "dishwasher.pause": [{
75695
+ name: "deviceId",
75696
+ form: "single",
75697
+ optional: false
75698
+ }],
75699
+ "dishwasher.setChildLock": [{
75700
+ name: "deviceId",
75701
+ form: "single",
75702
+ optional: false
75703
+ }],
75704
+ "dishwasher.setExtraDry": [{
75705
+ name: "deviceId",
75706
+ form: "single",
75707
+ optional: false
75708
+ }],
75709
+ "dishwasher.setHalfLoad": [{
75710
+ name: "deviceId",
75711
+ form: "single",
75712
+ optional: false
75713
+ }],
75714
+ "dishwasher.setHygienePlus": [{
75715
+ name: "deviceId",
75716
+ form: "single",
75717
+ optional: false
75718
+ }],
75719
+ "dishwasher.setIntensiveZone": [{
75720
+ name: "deviceId",
75721
+ form: "single",
75722
+ optional: false
75723
+ }],
75724
+ "dishwasher.setOption": [{
75725
+ name: "deviceId",
75726
+ form: "single",
75727
+ optional: false
75728
+ }],
75729
+ "dishwasher.setPower": [{
75730
+ name: "deviceId",
75731
+ form: "single",
75732
+ optional: false
75733
+ }],
75734
+ "dishwasher.setProgram": [{
75735
+ name: "deviceId",
75736
+ form: "single",
75737
+ optional: false
75738
+ }],
75739
+ "dishwasher.setVarioSpeedPlus": [{
75740
+ name: "deviceId",
75741
+ form: "single",
75742
+ optional: false
75743
+ }],
75744
+ "dishwasher.start": [{
75745
+ name: "deviceId",
75746
+ form: "single",
75747
+ optional: false
75748
+ }],
75749
+ "dishwasher.stop": [{
75750
+ name: "deviceId",
75751
+ form: "single",
75752
+ optional: false
75753
+ }],
75407
75754
  "doorbell.getStatus": [{
75408
75755
  name: "deviceId",
75409
75756
  form: "single",
@@ -75473,6 +75820,11 @@ Object.freeze({
75473
75820
  form: "single",
75474
75821
  optional: false
75475
75822
  }],
75823
+ "heatingValve.getStatus": [{
75824
+ name: "deviceId",
75825
+ form: "single",
75826
+ optional: false
75827
+ }],
75476
75828
  "humidifier.getStatus": [{
75477
75829
  name: "deviceId",
75478
75830
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-terminal",
3
- "version": "0.1.133",
3
+ "version": "0.1.134",
4
4
  "description": "Interactive terminal sessions (pty + xterm) as a CamStack addon",
5
5
  "keywords": [
6
6
  "camstack",