@camstack/addon-provider-homeassistant 1.2.646 → 1.2.647

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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.647] - 2026-11-02
11
+
12
+ ### Changed
13
+
14
+ - The new do-not-disturb capability is recorded as not exported to Home Assistant
15
+
10
16
  ## [1.2.646] - 2026-11-01
11
17
 
12
18
  ### Changed
package/dist/addon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_ha_broker_source = require("./ha-broker-source-gQYTcasw.js");
2
+ const require_ha_broker_source = require("./ha-broker-source-BFFi4NDH.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_zlib = require("node:zlib");
5
5
  //#region src/ha-admin-link.ts
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as humiditySensorCapability, $t as number, A as brokerCapability, At as temperatureSensorCapability, Bt as RecordSecretUnavailableError, C as alarmPanelCapability, Ct as runningFromVacuumState, D as bestLocationMatch, Dt as smokeCapability, E as batteryCapability, F as carbonMonoxideCapability, Ft as valveCapability, G as deviceAdoptionCapability, Gt as entryBody, H as controlCapability, Ht as createEvent, I as climateControlCapability, It as vibrationCapability, J as eventEmitterCapability, Jt as _enum, L as colorCapability, Lt as waterHeaterCapability, M as buildDeviceAdminUrl, Mt as tryConvertUnit, N as buttonCapability, Nt as updateCapability, O as binaryCapability, Ot as switchCapability, P as calendarSourceCapability, Pt as vacuumControlCapability, Q as humidifierCapability, Qt as literal, R as connectivityCapability, Rt as weatherCapability, S as airQualitySensorCapability, St as runningFromMediaPlayer, T as automationControlCapability, Tt as scriptRunnerCapability, U as coverCapability, Ut as defineEntryKind, V as contactCapability, Vt as baseUnitOf, W as deviceAdminLinkCapability, Wt as defineRecordKinds, X as floodCapability, Xt as boolean, Y as fanControlCapability, Yt as array, Z as gasCapability, Zt as discriminatedUnion, _t as publicEndpointReaderFrom, a as BaseDevice, an as url, at as motionCapability, b as accessoriesCapability, cn as DeviceType, ct as notifierCapability, dt as parseAdminBase, en as object, et as imageCapability, ft as powerMeterCapability, ht as pressureSensorCapability, in as unknown, it as mediaPlayerCapability, j as buildAddonRouteProvider, jt as tryConvertDelta, k as brightnessCapability, kt as tamperCapability, ln as errMsg, lt as numericSensorCapability, mt as presenceCapability, nn as string, nt as lawnMowerControlCapability, o as BaseDeviceProvider, on as DeviceFeature, ot as normalizeUnit, p as EnumSensorDateTimeFormatSchema, pt as prepareNotification, q as enumSensorCapability, rn as union, rt as lockControlCapability, sn as DeviceRole, st as notificationOutputCapability, t as HA_BROKER_KIND, tn as record, tt as ingestReading, un as EventCategory, v as RUNNING_STATE_COLD, vt as quantityFromUnit, w as ambientLightSensorCapability, wt as runningStateCapability, x as addonRoutesCapability, xt as runningFromLawnMower, y as TargetSchema, yt as resolveAttachmentUrls } from "./ha-broker-source-DRIYmtMd.mjs";
1
+ import { $ as humiditySensorCapability, $t as number, A as brokerCapability, At as temperatureSensorCapability, Bt as RecordSecretUnavailableError, C as alarmPanelCapability, Ct as runningFromVacuumState, D as bestLocationMatch, Dt as smokeCapability, E as batteryCapability, F as carbonMonoxideCapability, Ft as valveCapability, G as deviceAdoptionCapability, Gt as entryBody, H as controlCapability, Ht as createEvent, I as climateControlCapability, It as vibrationCapability, J as eventEmitterCapability, Jt as _enum, L as colorCapability, Lt as waterHeaterCapability, M as buildDeviceAdminUrl, Mt as tryConvertUnit, N as buttonCapability, Nt as updateCapability, O as binaryCapability, Ot as switchCapability, P as calendarSourceCapability, Pt as vacuumControlCapability, Q as humidifierCapability, Qt as literal, R as connectivityCapability, Rt as weatherCapability, S as airQualitySensorCapability, St as runningFromMediaPlayer, T as automationControlCapability, Tt as scriptRunnerCapability, U as coverCapability, Ut as defineEntryKind, V as contactCapability, Vt as baseUnitOf, W as deviceAdminLinkCapability, Wt as defineRecordKinds, X as floodCapability, Xt as boolean, Y as fanControlCapability, Yt as array, Z as gasCapability, Zt as discriminatedUnion, _t as publicEndpointReaderFrom, a as BaseDevice, an as url, at as motionCapability, b as accessoriesCapability, cn as DeviceType, ct as notifierCapability, dt as parseAdminBase, en as object, et as imageCapability, ft as powerMeterCapability, ht as pressureSensorCapability, in as unknown, it as mediaPlayerCapability, j as buildAddonRouteProvider, jt as tryConvertDelta, k as brightnessCapability, kt as tamperCapability, ln as errMsg, lt as numericSensorCapability, mt as presenceCapability, nn as string, nt as lawnMowerControlCapability, o as BaseDeviceProvider, on as DeviceFeature, ot as normalizeUnit, p as EnumSensorDateTimeFormatSchema, pt as prepareNotification, q as enumSensorCapability, rn as union, rt as lockControlCapability, sn as DeviceRole, st as notificationOutputCapability, t as HA_BROKER_KIND, tn as record, tt as ingestReading, un as EventCategory, v as RUNNING_STATE_COLD, vt as quantityFromUnit, w as ambientLightSensorCapability, wt as runningStateCapability, x as addonRoutesCapability, xt as runningFromLawnMower, y as TargetSchema, yt as resolveAttachmentUrls } from "./ha-broker-source-B6wqfEUz.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { brotliCompressSync, deflateSync, gzipSync } from "node:zlib";
4
4
  //#region src/ha-admin-link.ts
@@ -5971,7 +5971,7 @@ var ZodIssueCode = {
5971
5971
  var ZodFirstPartyTypeKind;
5972
5972
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5973
5973
  //#endregion
5974
- //#region ../types/dist/sleep-_4vKNWxb.mjs
5974
+ //#region ../types/dist/sleep-B-vp7x15.mjs
5975
5975
  /**
5976
5976
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5977
5977
  * window to float samples (D455).
@@ -9717,6 +9717,7 @@ var CAP_NAMES = Object.freeze([
9717
9717
  "device-status",
9718
9718
  "dishwasher",
9719
9719
  "display-palette",
9720
+ "do-not-disturb",
9720
9721
  "doorbell",
9721
9722
  "embedding-encoder",
9722
9723
  "enum-sensor",
@@ -10476,6 +10477,10 @@ Object.freeze({
10476
10477
  "valueType": "string"
10477
10478
  }
10478
10479
  ],
10480
+ "do-not-disturb": [{
10481
+ "path": "enabled",
10482
+ "valueType": "boolean"
10483
+ }],
10479
10484
  "doorbell": [{
10480
10485
  "path": "lastPressedAt",
10481
10486
  "valueType": "number"
@@ -20042,6 +20047,33 @@ var APPLIANCE_CAP_VOCABULARY = {
20042
20047
  }
20043
20048
  ]
20044
20049
  },
20050
+ "do-not-disturb": {
20051
+ scope: "device",
20052
+ noun: t("Do not disturb", "Non disturbare"),
20053
+ actions: [{
20054
+ id: "dnd.on",
20055
+ method: "setEnabled",
20056
+ label: t("Do not disturb on", "Attiva Non disturbare"),
20057
+ phrase: t("Turn on Do not disturb on {device}", "Attiva Non disturbare su {device}"),
20058
+ icon: "bell-off",
20059
+ args: { enabled: true }
20060
+ }, {
20061
+ id: "dnd.off",
20062
+ method: "setEnabled",
20063
+ label: t("Do not disturb off", "Disattiva Non disturbare"),
20064
+ phrase: t("Turn off Do not disturb on {device}", "Disattiva Non disturbare su {device}"),
20065
+ icon: "bell",
20066
+ args: { enabled: false }
20067
+ }],
20068
+ state: [{
20069
+ kind: "boolean",
20070
+ field: "enabled",
20071
+ label: t("Do not disturb", "Non disturbare"),
20072
+ whenTrue: t("When Do not disturb turns on on {device}", "Quando {device} attiva Non disturbare"),
20073
+ whenFalse: t("When Do not disturb turns off on {device}", "Quando {device} disattiva Non disturbare"),
20074
+ icon: "bell-off"
20075
+ }]
20076
+ },
20045
20077
  update: {
20046
20078
  scope: "device",
20047
20079
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -42252,14 +42284,16 @@ var DeviceIsLeafSchema = object({
42252
42284
  });
42253
42285
  /**
42254
42286
  * True when the camera currently has a PARKED object matching `subjects` in at
42255
- * least one of `zones`. Reads the zone-analytics snapshot through the same
42287
+ * least one of `zones` (`minCount` of them, default one). Reads the zone-analytics snapshot through the same
42256
42288
  * mirror as every other state leaf, so a dropped event never decides it (D49).
42257
42289
  */
42258
42290
  var StationaryPresentLeafSchema = object({
42259
42291
  kind: literal("stationary-present"),
42260
42292
  deviceId: number().int().nonnegative(),
42261
42293
  subjects: array(StationarySubjectSchema).min(1).optional(),
42262
- zones: array(string().min(1)).min(1).optional()
42294
+ zones: array(string().min(1)).min(1).optional(),
42295
+ /** How many matching parked objects must be there; absent means one. */
42296
+ minCount: number().int().positive().optional()
42263
42297
  });
42264
42298
  /**
42265
42299
  * The escape hatch: the bounded expression engine over named device bindings.
@@ -42771,6 +42805,28 @@ function convertLegacyRecipe(legacy) {
42771
42805
  * it. The output type is always the new one.
42772
42806
  */
42773
42807
  var AutomationRecipeSchema = union([CurrentAutomationRecipeSchema, LegacyAutomationRecipeSchema.transform(convertLegacyRecipe)]);
42808
+ var DETECTION_DESCRIPTIONS = {
42809
+ deviceId: "the camera that saw it",
42810
+ className: "what it saw",
42811
+ trackId: "the track",
42812
+ score: "how sure the detector was",
42813
+ label: "the label it matched (a name, a plate), empty when none"
42814
+ };
42815
+ var STATIONARY_DESCRIPTIONS = {
42816
+ deviceId: "the camera that saw it",
42817
+ className: "what it saw",
42818
+ zones: "the zones it is in",
42819
+ phase: "appeared or departed",
42820
+ entryId: "the stopped object"
42821
+ };
42822
+ function describe$1(descriptions) {
42823
+ return Object.entries(descriptions).map(([name, description]) => ({
42824
+ name,
42825
+ description
42826
+ }));
42827
+ }
42828
+ describe$1(DETECTION_DESCRIPTIONS);
42829
+ describe$1(STATIONARY_DESCRIPTIONS);
42774
42830
  new Set(Object.values(COCO_TO_MACRO.mapping));
42775
42831
  /**
42776
42832
  * Schedulers (D983) — an entity that performs actions over the day.
@@ -53735,6 +53791,49 @@ method(_void(), paletteResultSchema, {
53735
53791
  kind: "mutation",
53736
53792
  auth: "admin"
53737
53793
  });
53794
+ /**
53795
+ * do-not-disturb - whether a speaker or display holds back its own sounds
53796
+ * (announcements, notifications, alarms) until the operator lets it speak again.
53797
+ *
53798
+ * It is NOT part of `media-player`: a player is about what it plays and how
53799
+ * loud, while Do Not Disturb is a household switch the vendor keeps per device.
53800
+ * `enabled` is null when the vendor has not said (never a guess of `false`).
53801
+ */
53802
+ var DoNotDisturbStatusSchema = object({
53803
+ /** True while Do Not Disturb is on; null when unknown. */
53804
+ enabled: boolean().nullable().meta({ label: "Do not disturb" }),
53805
+ /** Ms epoch of the last read or write that set `enabled`. */
53806
+ lastChangedAt: number()
53807
+ });
53808
+ var doNotDisturbCapability = {
53809
+ name: "do-not-disturb",
53810
+ scope: "device",
53811
+ deviceNative: true,
53812
+ mode: "singleton",
53813
+ deviceTypes: [DeviceType.MediaPlayer],
53814
+ methods: { setEnabled: method(object({
53815
+ deviceId: number().int(),
53816
+ enabled: boolean()
53817
+ }), _void(), {
53818
+ kind: "mutation",
53819
+ auth: "protected"
53820
+ }) },
53821
+ status: {
53822
+ schema: DoNotDisturbStatusSchema,
53823
+ kind: "push"
53824
+ },
53825
+ runtimeState: DoNotDisturbStatusSchema,
53826
+ /**
53827
+ * Runtime-state durability: **session** - the vendor owns the switch and the
53828
+ * device re-reads it on the next poll, so a restored value would only be stale.
53829
+ *
53830
+ * See `RuntimeStateDurability`. Enforced by
53831
+ * `scripts/check-runtime-state-durability.ts`.
53832
+ */
53833
+ durability: "session",
53834
+ /** History (D850): when Do Not Disturb was switched on and off. */
53835
+ history: { fields: { enabled: { kind: "boolean" } } }
53836
+ };
53738
53837
  /** Pulse override: a rising edge advances `lastPressedAt` and the press count. */
53739
53838
  var doorbellCustomize = {
53740
53839
  version: 1,
@@ -56336,6 +56435,14 @@ var LlmGenerateBaseInputSchema = object({
56336
56435
  topP: number().min(0).max(1).optional(),
56337
56436
  /** Per-call override of the profile default (top-k sampling). */
56338
56437
  topK: number().int().positive().optional(),
56438
+ /** Per-call override of `profile.reasoningEffort`. Sent only to a kind whose
56439
+ * descriptor offers the field; a kind that does not never sends it. */
56440
+ reasoningEffort: _enum([
56441
+ "off",
56442
+ "low",
56443
+ "medium",
56444
+ "high"
56445
+ ]).optional(),
56339
56446
  /** Per-call override of `profile.timeoutMs` — the total generation bound. */
56340
56447
  timeoutMs: number().int().positive().optional(),
56341
56448
  /** Per-call override; beats both the consumer table and the profile. */
@@ -56627,7 +56734,10 @@ var LlmProfileKindSchema = string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "a kind i
56627
56734
  var LlmModelFeaturesSchema = object({
56628
56735
  vision: boolean(),
56629
56736
  tools: boolean(),
56630
- streaming: boolean()
56737
+ streaming: boolean(),
56738
+ /** Whether the model thinks before it answers. `null` = the endpoint does not
56739
+ * say; an editor then still offers the switch (unknown is not "no"). */
56740
+ reasoning: boolean().nullable().optional()
56631
56741
  });
56632
56742
  /** One model a provider offers. `features` overrides the kind's defaults, per field. */
56633
56743
  var LlmModelInfoSchema = object({
@@ -74837,9 +74947,17 @@ var ServerUpdateActionResultSchema = object({
74837
74947
  */
74838
74948
  requiredAddonUpdates: array(RequiredAddonUpdateSchema).optional()
74839
74949
  });
74840
- var LaunchOverridesSchema = object({
74841
- /** The persisted heap ceiling in MB, or `null` when none is set. */
74842
- heapMb: number().int().nullable() });
74950
+ var LaunchOverridesSchema = object({
74951
+ /** The persisted heap ceiling in MB, or `null` when none is set. */
74952
+ heapMb: number().int().nullable(),
74953
+ /** The persisted hub-main RSS budget in MB, or `null` when none is set. */
74954
+ rssBudgetMb: number().int().nullable()
74955
+ });
74956
+ var SetLaunchOverridesInputSchema = object({
74957
+ heapMb: number().int().min(512).max(65536).nullable(),
74958
+ /** Omitted keeps the stored budget; `null` clears it. */
74959
+ rssBudgetMb: number().int().min(512).max(65536).nullable().optional()
74960
+ });
74843
74961
  var SetLaunchOverridesResultSchema = LaunchOverridesSchema.extend({
74844
74962
  /** Always true: the override is read at launch, not by the running process. */
74845
74963
  restartRequired: boolean() });
@@ -74868,7 +74986,7 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
74868
74986
  }), method(_void(), ServerUpdateActionResultSchema, {
74869
74987
  kind: "mutation",
74870
74988
  auth: "admin"
74871
- }), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(object({ heapMb: number().int().min(512).max(65536).nullable() }), SetLaunchOverridesResultSchema, {
74989
+ }), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(SetLaunchOverridesInputSchema, SetLaunchOverridesResultSchema, {
74872
74990
  kind: "mutation",
74873
74991
  auth: "admin"
74874
74992
  });
@@ -80137,6 +80255,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
80137
80255
  deviceDiscovery: deviceDiscoveryCapability,
80138
80256
  deviceStatus: deviceStatusCapability,
80139
80257
  dishwasher: dishwasherCapability,
80258
+ doNotDisturb: doNotDisturbCapability,
80140
80259
  doorbell: doorbellCapability,
80141
80260
  enumSensor: enumSensorCapability,
80142
80261
  eventEmitter: eventEmitterCapability,
@@ -84590,6 +84709,20 @@ Object.freeze({
84590
84709
  access: "create",
84591
84710
  role: "admin"
84592
84711
  },
84712
+ "doNotDisturb.getStatus": {
84713
+ capName: "do-not-disturb",
84714
+ capScope: "device",
84715
+ addonId: null,
84716
+ access: "view",
84717
+ role: "viewer"
84718
+ },
84719
+ "doNotDisturb.setEnabled": {
84720
+ capName: "do-not-disturb",
84721
+ capScope: "device",
84722
+ addonId: null,
84723
+ access: "create",
84724
+ role: "viewer"
84725
+ },
84593
84726
  "doorbell.getStatus": {
84594
84727
  capName: "doorbell",
84595
84728
  capScope: "device",
@@ -92789,6 +92922,16 @@ Object.freeze({
92789
92922
  form: "single",
92790
92923
  optional: false
92791
92924
  }],
92925
+ "doNotDisturb.getStatus": [{
92926
+ name: "deviceId",
92927
+ form: "single",
92928
+ optional: false
92929
+ }],
92930
+ "doNotDisturb.setEnabled": [{
92931
+ name: "deviceId",
92932
+ form: "single",
92933
+ optional: false
92934
+ }],
92792
92935
  "doorbell.getStatus": [{
92793
92936
  name: "deviceId",
92794
92937
  form: "single",
@@ -5972,7 +5972,7 @@ var ZodIssueCode = {
5972
5972
  var ZodFirstPartyTypeKind;
5973
5973
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5974
5974
  //#endregion
5975
- //#region ../types/dist/sleep-_4vKNWxb.mjs
5975
+ //#region ../types/dist/sleep-B-vp7x15.mjs
5976
5976
  /**
5977
5977
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5978
5978
  * window to float samples (D455).
@@ -9718,6 +9718,7 @@ var CAP_NAMES = Object.freeze([
9718
9718
  "device-status",
9719
9719
  "dishwasher",
9720
9720
  "display-palette",
9721
+ "do-not-disturb",
9721
9722
  "doorbell",
9722
9723
  "embedding-encoder",
9723
9724
  "enum-sensor",
@@ -10477,6 +10478,10 @@ Object.freeze({
10477
10478
  "valueType": "string"
10478
10479
  }
10479
10480
  ],
10481
+ "do-not-disturb": [{
10482
+ "path": "enabled",
10483
+ "valueType": "boolean"
10484
+ }],
10480
10485
  "doorbell": [{
10481
10486
  "path": "lastPressedAt",
10482
10487
  "valueType": "number"
@@ -20043,6 +20048,33 @@ var APPLIANCE_CAP_VOCABULARY = {
20043
20048
  }
20044
20049
  ]
20045
20050
  },
20051
+ "do-not-disturb": {
20052
+ scope: "device",
20053
+ noun: t("Do not disturb", "Non disturbare"),
20054
+ actions: [{
20055
+ id: "dnd.on",
20056
+ method: "setEnabled",
20057
+ label: t("Do not disturb on", "Attiva Non disturbare"),
20058
+ phrase: t("Turn on Do not disturb on {device}", "Attiva Non disturbare su {device}"),
20059
+ icon: "bell-off",
20060
+ args: { enabled: true }
20061
+ }, {
20062
+ id: "dnd.off",
20063
+ method: "setEnabled",
20064
+ label: t("Do not disturb off", "Disattiva Non disturbare"),
20065
+ phrase: t("Turn off Do not disturb on {device}", "Disattiva Non disturbare su {device}"),
20066
+ icon: "bell",
20067
+ args: { enabled: false }
20068
+ }],
20069
+ state: [{
20070
+ kind: "boolean",
20071
+ field: "enabled",
20072
+ label: t("Do not disturb", "Non disturbare"),
20073
+ whenTrue: t("When Do not disturb turns on on {device}", "Quando {device} attiva Non disturbare"),
20074
+ whenFalse: t("When Do not disturb turns off on {device}", "Quando {device} disattiva Non disturbare"),
20075
+ icon: "bell-off"
20076
+ }]
20077
+ },
20046
20078
  update: {
20047
20079
  scope: "device",
20048
20080
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -42253,14 +42285,16 @@ var DeviceIsLeafSchema = object({
42253
42285
  });
42254
42286
  /**
42255
42287
  * True when the camera currently has a PARKED object matching `subjects` in at
42256
- * least one of `zones`. Reads the zone-analytics snapshot through the same
42288
+ * least one of `zones` (`minCount` of them, default one). Reads the zone-analytics snapshot through the same
42257
42289
  * mirror as every other state leaf, so a dropped event never decides it (D49).
42258
42290
  */
42259
42291
  var StationaryPresentLeafSchema = object({
42260
42292
  kind: literal("stationary-present"),
42261
42293
  deviceId: number().int().nonnegative(),
42262
42294
  subjects: array(StationarySubjectSchema).min(1).optional(),
42263
- zones: array(string().min(1)).min(1).optional()
42295
+ zones: array(string().min(1)).min(1).optional(),
42296
+ /** How many matching parked objects must be there; absent means one. */
42297
+ minCount: number().int().positive().optional()
42264
42298
  });
42265
42299
  /**
42266
42300
  * The escape hatch: the bounded expression engine over named device bindings.
@@ -42772,6 +42806,28 @@ function convertLegacyRecipe(legacy) {
42772
42806
  * it. The output type is always the new one.
42773
42807
  */
42774
42808
  var AutomationRecipeSchema = union([CurrentAutomationRecipeSchema, LegacyAutomationRecipeSchema.transform(convertLegacyRecipe)]);
42809
+ var DETECTION_DESCRIPTIONS = {
42810
+ deviceId: "the camera that saw it",
42811
+ className: "what it saw",
42812
+ trackId: "the track",
42813
+ score: "how sure the detector was",
42814
+ label: "the label it matched (a name, a plate), empty when none"
42815
+ };
42816
+ var STATIONARY_DESCRIPTIONS = {
42817
+ deviceId: "the camera that saw it",
42818
+ className: "what it saw",
42819
+ zones: "the zones it is in",
42820
+ phase: "appeared or departed",
42821
+ entryId: "the stopped object"
42822
+ };
42823
+ function describe$1(descriptions) {
42824
+ return Object.entries(descriptions).map(([name, description]) => ({
42825
+ name,
42826
+ description
42827
+ }));
42828
+ }
42829
+ describe$1(DETECTION_DESCRIPTIONS);
42830
+ describe$1(STATIONARY_DESCRIPTIONS);
42775
42831
  new Set(Object.values(COCO_TO_MACRO.mapping));
42776
42832
  /**
42777
42833
  * Schedulers (D983) — an entity that performs actions over the day.
@@ -53736,6 +53792,49 @@ method(_void(), paletteResultSchema, {
53736
53792
  kind: "mutation",
53737
53793
  auth: "admin"
53738
53794
  });
53795
+ /**
53796
+ * do-not-disturb - whether a speaker or display holds back its own sounds
53797
+ * (announcements, notifications, alarms) until the operator lets it speak again.
53798
+ *
53799
+ * It is NOT part of `media-player`: a player is about what it plays and how
53800
+ * loud, while Do Not Disturb is a household switch the vendor keeps per device.
53801
+ * `enabled` is null when the vendor has not said (never a guess of `false`).
53802
+ */
53803
+ var DoNotDisturbStatusSchema = object({
53804
+ /** True while Do Not Disturb is on; null when unknown. */
53805
+ enabled: boolean().nullable().meta({ label: "Do not disturb" }),
53806
+ /** Ms epoch of the last read or write that set `enabled`. */
53807
+ lastChangedAt: number()
53808
+ });
53809
+ var doNotDisturbCapability = {
53810
+ name: "do-not-disturb",
53811
+ scope: "device",
53812
+ deviceNative: true,
53813
+ mode: "singleton",
53814
+ deviceTypes: [DeviceType.MediaPlayer],
53815
+ methods: { setEnabled: method(object({
53816
+ deviceId: number().int(),
53817
+ enabled: boolean()
53818
+ }), _void(), {
53819
+ kind: "mutation",
53820
+ auth: "protected"
53821
+ }) },
53822
+ status: {
53823
+ schema: DoNotDisturbStatusSchema,
53824
+ kind: "push"
53825
+ },
53826
+ runtimeState: DoNotDisturbStatusSchema,
53827
+ /**
53828
+ * Runtime-state durability: **session** - the vendor owns the switch and the
53829
+ * device re-reads it on the next poll, so a restored value would only be stale.
53830
+ *
53831
+ * See `RuntimeStateDurability`. Enforced by
53832
+ * `scripts/check-runtime-state-durability.ts`.
53833
+ */
53834
+ durability: "session",
53835
+ /** History (D850): when Do Not Disturb was switched on and off. */
53836
+ history: { fields: { enabled: { kind: "boolean" } } }
53837
+ };
53739
53838
  /** Pulse override: a rising edge advances `lastPressedAt` and the press count. */
53740
53839
  var doorbellCustomize = {
53741
53840
  version: 1,
@@ -56337,6 +56436,14 @@ var LlmGenerateBaseInputSchema = object({
56337
56436
  topP: number().min(0).max(1).optional(),
56338
56437
  /** Per-call override of the profile default (top-k sampling). */
56339
56438
  topK: number().int().positive().optional(),
56439
+ /** Per-call override of `profile.reasoningEffort`. Sent only to a kind whose
56440
+ * descriptor offers the field; a kind that does not never sends it. */
56441
+ reasoningEffort: _enum([
56442
+ "off",
56443
+ "low",
56444
+ "medium",
56445
+ "high"
56446
+ ]).optional(),
56340
56447
  /** Per-call override of `profile.timeoutMs` — the total generation bound. */
56341
56448
  timeoutMs: number().int().positive().optional(),
56342
56449
  /** Per-call override; beats both the consumer table and the profile. */
@@ -56628,7 +56735,10 @@ var LlmProfileKindSchema = string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "a kind i
56628
56735
  var LlmModelFeaturesSchema = object({
56629
56736
  vision: boolean(),
56630
56737
  tools: boolean(),
56631
- streaming: boolean()
56738
+ streaming: boolean(),
56739
+ /** Whether the model thinks before it answers. `null` = the endpoint does not
56740
+ * say; an editor then still offers the switch (unknown is not "no"). */
56741
+ reasoning: boolean().nullable().optional()
56632
56742
  });
56633
56743
  /** One model a provider offers. `features` overrides the kind's defaults, per field. */
56634
56744
  var LlmModelInfoSchema = object({
@@ -74838,9 +74948,17 @@ var ServerUpdateActionResultSchema = object({
74838
74948
  */
74839
74949
  requiredAddonUpdates: array(RequiredAddonUpdateSchema).optional()
74840
74950
  });
74841
- var LaunchOverridesSchema = object({
74842
- /** The persisted heap ceiling in MB, or `null` when none is set. */
74843
- heapMb: number().int().nullable() });
74951
+ var LaunchOverridesSchema = object({
74952
+ /** The persisted heap ceiling in MB, or `null` when none is set. */
74953
+ heapMb: number().int().nullable(),
74954
+ /** The persisted hub-main RSS budget in MB, or `null` when none is set. */
74955
+ rssBudgetMb: number().int().nullable()
74956
+ });
74957
+ var SetLaunchOverridesInputSchema = object({
74958
+ heapMb: number().int().min(512).max(65536).nullable(),
74959
+ /** Omitted keeps the stored budget; `null` clears it. */
74960
+ rssBudgetMb: number().int().min(512).max(65536).nullable().optional()
74961
+ });
74844
74962
  var SetLaunchOverridesResultSchema = LaunchOverridesSchema.extend({
74845
74963
  /** Always true: the override is read at launch, not by the running process. */
74846
74964
  restartRequired: boolean() });
@@ -74869,7 +74987,7 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
74869
74987
  }), method(_void(), ServerUpdateActionResultSchema, {
74870
74988
  kind: "mutation",
74871
74989
  auth: "admin"
74872
- }), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(object({ heapMb: number().int().min(512).max(65536).nullable() }), SetLaunchOverridesResultSchema, {
74990
+ }), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(SetLaunchOverridesInputSchema, SetLaunchOverridesResultSchema, {
74873
74991
  kind: "mutation",
74874
74992
  auth: "admin"
74875
74993
  });
@@ -80138,6 +80256,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
80138
80256
  deviceDiscovery: deviceDiscoveryCapability,
80139
80257
  deviceStatus: deviceStatusCapability,
80140
80258
  dishwasher: dishwasherCapability,
80259
+ doNotDisturb: doNotDisturbCapability,
80141
80260
  doorbell: doorbellCapability,
80142
80261
  enumSensor: enumSensorCapability,
80143
80262
  eventEmitter: eventEmitterCapability,
@@ -84591,6 +84710,20 @@ Object.freeze({
84591
84710
  access: "create",
84592
84711
  role: "admin"
84593
84712
  },
84713
+ "doNotDisturb.getStatus": {
84714
+ capName: "do-not-disturb",
84715
+ capScope: "device",
84716
+ addonId: null,
84717
+ access: "view",
84718
+ role: "viewer"
84719
+ },
84720
+ "doNotDisturb.setEnabled": {
84721
+ capName: "do-not-disturb",
84722
+ capScope: "device",
84723
+ addonId: null,
84724
+ access: "create",
84725
+ role: "viewer"
84726
+ },
84594
84727
  "doorbell.getStatus": {
84595
84728
  capName: "doorbell",
84596
84729
  capScope: "device",
@@ -92790,6 +92923,16 @@ Object.freeze({
92790
92923
  form: "single",
92791
92924
  optional: false
92792
92925
  }],
92926
+ "doNotDisturb.getStatus": [{
92927
+ name: "deviceId",
92928
+ form: "single",
92929
+ optional: false
92930
+ }],
92931
+ "doNotDisturb.setEnabled": [{
92932
+ name: "deviceId",
92933
+ form: "single",
92934
+ optional: false
92935
+ }],
92793
92936
  "doorbell.getStatus": [{
92794
92937
  name: "deviceId",
92795
92938
  form: "single",
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  enumerable: true
25
25
  }) : target, mod));
26
26
  //#endregion
27
- const require_ha_broker_source = require("../ha-broker-source-gQYTcasw.js");
27
+ const require_ha_broker_source = require("../ha-broker-source-BFFi4NDH.js");
28
28
  let node_crypto = require("node:crypto");
29
29
  require("node:zlib");
30
30
  let node_fs = require("node:fs");
@@ -3485,6 +3485,10 @@ function controlEntitySpecs(slice, quantity) {
3485
3485
  }, kindExtra];
3486
3486
  }
3487
3487
  var CAPS_NOT_EXPORTED = [
3488
+ {
3489
+ cap: "do-not-disturb",
3490
+ reason: "A vendor switch of a speaker, provided so far only by an imported Echo: its media player is the entity a home-automation front end needs, and no entity kind has been chosen for the Do Not Disturb switch yet."
3491
+ },
3488
3492
  {
3489
3493
  cap: "timed-run",
3490
3494
  reason: "A hub-side timer for a device that has none: a \"run for N minutes\" command and the deadline of the pending switch-off. The switch or pump it drives is already exported through `switch`, and the deadline is a countdown, not a value an entity can hold."
@@ -1,4 +1,4 @@
1
- import { B as consumableKindOf, Et as sendToExportedTarget, K as deviceExportCapability, Kt as isReadingQuantity, Vt as baseUnitOf, Yt as array, _ as PLUG_APPLIANCE_TYPES, bt as runExportedAction, c as COCO_TO_MACRO, d as ConsumableItemSchema, en as object, f as ConsumableStatusSchema, g as MediaPlayerRepeatSchema, gt as pruneDeletedEntities, h as HvacModeSchema, i as AlarmArmModeSchema, in as unknown, j as buildAddonRouteProvider, l as CameraSwitchIdSchema, m as FanDirectionSchema, nn as string, qt as nodePin, r as listHomeAssistantBrokers, s as CAMERA_SWITCH_ORDER, u as ConsumableFormSchema, un as EventCategory, ut as oauthIntegrationCapability, x as addonRoutesCapability, z as consumableFormOf, zt as BaseAddon } from "../ha-broker-source-DRIYmtMd.mjs";
1
+ import { B as consumableKindOf, Et as sendToExportedTarget, K as deviceExportCapability, Kt as isReadingQuantity, Vt as baseUnitOf, Yt as array, _ as PLUG_APPLIANCE_TYPES, bt as runExportedAction, c as COCO_TO_MACRO, d as ConsumableItemSchema, en as object, f as ConsumableStatusSchema, g as MediaPlayerRepeatSchema, gt as pruneDeletedEntities, h as HvacModeSchema, i as AlarmArmModeSchema, in as unknown, j as buildAddonRouteProvider, l as CameraSwitchIdSchema, m as FanDirectionSchema, nn as string, qt as nodePin, r as listHomeAssistantBrokers, s as CAMERA_SWITCH_ORDER, u as ConsumableFormSchema, un as EventCategory, ut as oauthIntegrationCapability, x as addonRoutesCapability, z as consumableFormOf, zt as BaseAddon } from "../ha-broker-source-B6wqfEUz.mjs";
2
2
  import { createHmac, timingSafeEqual } from "node:crypto";
3
3
  import "node:zlib";
4
4
  import "node:fs";
@@ -3450,6 +3450,10 @@ function controlEntitySpecs(slice, quantity) {
3450
3450
  }, kindExtra];
3451
3451
  }
3452
3452
  var CAPS_NOT_EXPORTED = [
3453
+ {
3454
+ cap: "do-not-disturb",
3455
+ reason: "A vendor switch of a speaker, provided so far only by an imported Echo: its media player is the entity a home-automation front end needs, and no entity kind has been chosen for the Do Not Disturb switch yet."
3456
+ },
3453
3457
  {
3454
3458
  cap: "timed-run",
3455
3459
  reason: "A hub-side timer for a device that has none: a \"run for N minutes\" command and the deadline of the pending switch-off. The switch or pump it drives is already exported through `switch`, and the deadline is a countdown, not a value an entity can hold."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homeassistant",
3
- "version": "1.2.646",
3
+ "version": "1.2.647",
4
4
  "description": "Home Assistant device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",
@@ -127,7 +127,7 @@
127
127
  "description": "Device provider (import) + native entity export (push). Two addons, one bundle, separate processes."
128
128
  },
129
129
  "requires": {
130
- "server": ">=1.2.730"
130
+ "server": ">=1.2.731"
131
131
  }
132
132
  },
133
133
  "files": [