@camstack/addon-provider-homeassistant 1.2.646 → 1.2.648
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 +12 -0
- package/README.md +1 -1
- package/dist/addon.js +1 -1
- package/dist/addon.mjs +1 -1
- package/dist/{ha-broker-source-gQYTcasw.js → ha-broker-source-Ba20mhmb.js} +361 -10
- package/dist/{ha-broker-source-DRIYmtMd.mjs → ha-broker-source-iLA_DsW8.mjs} +350 -11
- package/dist/ha-export/ha-export.addon.js +141 -60
- package/dist/ha-export/ha-export.addon.mjs +141 -60
- package/i18n/en.json +0 -2
- package/i18n/it.json +0 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.648] - 2026-11-02
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Home Assistant export: the Hub URL setting is gone; each Home Assistant instance now chooses whether its image links use the Internal address or the Public endpoint of the Network page.
|
|
15
|
+
|
|
16
|
+
## [1.2.647] - 2026-11-02
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- The new do-not-disturb capability is recorded as not exported to Home Assistant
|
|
21
|
+
|
|
10
22
|
## [1.2.646] - 2026-11-01
|
|
11
23
|
|
|
12
24
|
### Changed
|
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Edit these from System, Addons, this addon, Settings (a device's own settings ar
|
|
|
23
23
|
- Home Assistant broker: Brokers are managed separately
|
|
24
24
|
- Home Assistant connection: Auth mode, HA base URL, Long-lived access token, Supervisor token
|
|
25
25
|
- Home Assistant instances: No brokers
|
|
26
|
-
- Connection:
|
|
26
|
+
- Connection: per Home Assistant instance, the hub address role its image links use (Internal, or Public endpoint)
|
|
27
27
|
- Advanced: Reconcile interval (s)
|
|
28
28
|
|
|
29
29
|
## Requirements
|
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-
|
|
2
|
+
const require_ha_broker_source = require("./ha-broker-source-Ba20mhmb.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
|
|
1
|
+
import { $ as humiditySensorCapability, $t as discriminatedUnion, A as brokerCapability, At as tamperCapability, C as alarmPanelCapability, Ct as runningFromMediaPlayer, D as bestLocationMatch, E as batteryCapability, Et as scriptRunnerCapability, F as carbonMonoxideCapability, Ft as vacuumControlCapability, G as deviceAdoptionCapability, Gt as defineEntryKind, H as controlCapability, Ht as baseUnitOf, I as climateControlCapability, It as valveCapability, J as eventEmitterCapability, Kt as defineRecordKinds, L as colorCapability, Lt as vibrationCapability, M as buildDeviceAdminUrl, Mt as tryConvertDelta, N as buttonCapability, Nt as tryConvertUnit, O as binaryCapability, Ot as smokeCapability, P as calendarSourceCapability, Pt as updateCapability, Q as humidifierCapability, Qt as boolean, R as connectivityCapability, Rt as waterHeaterCapability, S as airQualitySensorCapability, St as runningFromLawnMower, T as automationControlCapability, Tt as runningStateCapability, U as coverCapability, Ut as createEvent, V as contactCapability, Vt as RecordSecretUnavailableError, W as deviceAdminLinkCapability, X as floodCapability, Xt as _enum, Y as fanControlCapability, Z as gasCapability, Zt as array, a as BaseDevice, an as union, at as motionCapability, b as accessoriesCapability, bt as resolveAttachmentUrls, cn as DeviceFeature, ct as notifierCapability, dn as errMsg, dt as parseAdminBase, en as literal, et as imageCapability, fn as EventCategory, ft as powerMeterCapability, gt as pressureSensorCapability, ht as presenceCapability, in as string, it as mediaPlayerCapability, j as buildAddonRouteProvider, jt as temperatureSensorCapability, k as brightnessCapability, kt as switchCapability, ln as DeviceRole, lt as numericSensorCapability, mt as prepareNotification, nn as object, nt as lawnMowerControlCapability, o as BaseDeviceProvider, on as unknown, ot as normalizeUnit, p as EnumSensorDateTimeFormatSchema, q as enumSensorCapability, qt as entryBody, rn as record, rt as lockControlCapability, sn as url, st as notificationOutputCapability, t as HA_BROKER_KIND, tn as number, tt as ingestReading, un as DeviceType, v as RUNNING_STATE_COLD, vt as publicEndpointReaderFrom, w as ambientLightSensorCapability, wt as runningFromVacuumState, x as addonRoutesCapability, y as TargetSchema, yt as quantityFromUnit, zt as weatherCapability } from "./ha-broker-source-iLA_DsW8.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
|
|
@@ -5972,7 +5972,7 @@ var ZodIssueCode = {
|
|
|
5972
5972
|
var ZodFirstPartyTypeKind;
|
|
5973
5973
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5974
5974
|
//#endregion
|
|
5975
|
-
//#region ../types/dist/sleep-
|
|
5975
|
+
//#region ../types/dist/sleep-Bei295Bz.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).
|
|
@@ -6488,6 +6488,53 @@ function emitReadiness(bus, params) {
|
|
|
6488
6488
|
ts
|
|
6489
6489
|
}));
|
|
6490
6490
|
}
|
|
6491
|
+
/** Why a catalogue entry is not a runnable body of its declared kind. */
|
|
6492
|
+
var AddonMigrationDefinitionError = class extends Error {
|
|
6493
|
+
id;
|
|
6494
|
+
constructor(id, message) {
|
|
6495
|
+
super(`${id}: ${message}`);
|
|
6496
|
+
this.id = id;
|
|
6497
|
+
this.name = "AddonMigrationDefinitionError";
|
|
6498
|
+
}
|
|
6499
|
+
};
|
|
6500
|
+
/**
|
|
6501
|
+
* Bind a catalogue to the addon's ports. Throws {@link AddonMigrationDefinitionError} when
|
|
6502
|
+
* an entry's `bodyKind` does not match the body it carries, or is `sql` (a hub-only
|
|
6503
|
+
* body). A throwing body never escapes `execute`: it is reported as a failed result.
|
|
6504
|
+
*/
|
|
6505
|
+
function defineAddonMigrations(catalogue, ports) {
|
|
6506
|
+
return catalogue.map((entry) => {
|
|
6507
|
+
const { meta } = entry;
|
|
6508
|
+
if ("plan" in entry) {
|
|
6509
|
+
if (meta.bodyKind !== "plan") throw new AddonMigrationDefinitionError(meta.id, `carries a plan body but declares "${meta.bodyKind}"`);
|
|
6510
|
+
return {
|
|
6511
|
+
meta,
|
|
6512
|
+
execute: () => guarded(async () => ({
|
|
6513
|
+
kind: "plan",
|
|
6514
|
+
plan: await entry.plan(ports)
|
|
6515
|
+
}))
|
|
6516
|
+
};
|
|
6517
|
+
}
|
|
6518
|
+
if (meta.bodyKind !== "procedure") throw new AddonMigrationDefinitionError(meta.id, `carries a procedure body but declares "${meta.bodyKind}"`);
|
|
6519
|
+
return {
|
|
6520
|
+
meta,
|
|
6521
|
+
execute: () => guarded(async () => ({
|
|
6522
|
+
kind: "procedure",
|
|
6523
|
+
result: await entry.procedure(ports)
|
|
6524
|
+
}))
|
|
6525
|
+
};
|
|
6526
|
+
});
|
|
6527
|
+
}
|
|
6528
|
+
async function guarded(work) {
|
|
6529
|
+
try {
|
|
6530
|
+
return await work();
|
|
6531
|
+
} catch (err) {
|
|
6532
|
+
return {
|
|
6533
|
+
kind: "failed",
|
|
6534
|
+
error: errMsg(err)
|
|
6535
|
+
};
|
|
6536
|
+
}
|
|
6537
|
+
}
|
|
6491
6538
|
var NOT_RUN = {
|
|
6492
6539
|
declared: false,
|
|
6493
6540
|
snapshot: null,
|
|
@@ -9718,6 +9765,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9718
9765
|
"device-status",
|
|
9719
9766
|
"dishwasher",
|
|
9720
9767
|
"display-palette",
|
|
9768
|
+
"do-not-disturb",
|
|
9721
9769
|
"doorbell",
|
|
9722
9770
|
"embedding-encoder",
|
|
9723
9771
|
"enum-sensor",
|
|
@@ -10477,6 +10525,10 @@ Object.freeze({
|
|
|
10477
10525
|
"valueType": "string"
|
|
10478
10526
|
}
|
|
10479
10527
|
],
|
|
10528
|
+
"do-not-disturb": [{
|
|
10529
|
+
"path": "enabled",
|
|
10530
|
+
"valueType": "boolean"
|
|
10531
|
+
}],
|
|
10480
10532
|
"doorbell": [{
|
|
10481
10533
|
"path": "lastPressedAt",
|
|
10482
10534
|
"valueType": "number"
|
|
@@ -14119,6 +14171,16 @@ var MigrationPlanSchema = object({ edits: array(discriminatedUnion("op", [
|
|
|
14119
14171
|
precondition: PreconditionSchema
|
|
14120
14172
|
})
|
|
14121
14173
|
])) });
|
|
14174
|
+
/** `JSON.stringify` with object keys sorted, so equal values spell the same. */
|
|
14175
|
+
function canonicalJson(value) {
|
|
14176
|
+
if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item)).join(",")}]`;
|
|
14177
|
+
if (typeof value === "object" && value !== null) return `{${Object.entries(value).filter(([, item]) => item !== void 0).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`).join(",")}}`;
|
|
14178
|
+
return JSON.stringify(value) ?? "null";
|
|
14179
|
+
}
|
|
14180
|
+
/** The precondition string for a value a plan read (`null` when it read nothing). */
|
|
14181
|
+
function preconditionOf(value) {
|
|
14182
|
+
return canonicalJson(value ?? null);
|
|
14183
|
+
}
|
|
14122
14184
|
/**
|
|
14123
14185
|
* What a `procedure` body reports. `already-done` means the rerun observed the
|
|
14124
14186
|
* work finished (a crash between the work and the ledger row, or a manual fix)
|
|
@@ -16067,8 +16129,18 @@ var LogChannelDescriptorSchema = object({
|
|
|
16067
16129
|
* the operator narrows to one camera, sees nothing, and concludes the code
|
|
16068
16130
|
* path was never taken.
|
|
16069
16131
|
*/
|
|
16070
|
-
perDevice: boolean()
|
|
16071
|
-
|
|
16132
|
+
perDevice: boolean(),
|
|
16133
|
+
/**
|
|
16134
|
+
* What the channel is FOR, so the UI can list the channels an addon offers.
|
|
16135
|
+
*
|
|
16136
|
+
* - `diagnostic` (the default): a per-component diagnostic armed from the
|
|
16137
|
+
* Levels page, emitted at its declared level.
|
|
16138
|
+
* - `debug`: a `debug.<channel>` dump watched live for a short window
|
|
16139
|
+
* (`ctx.debug`). Always per-device, and its lines are denied by the log
|
|
16140
|
+
* ring unless somebody is watching that device.
|
|
16141
|
+
*/
|
|
16142
|
+
kind: _enum(["diagnostic", "debug"]).default("diagnostic")
|
|
16143
|
+
}).refine((d) => d.kind !== "debug" || d.name.startsWith("debug.") && d.perDevice, { message: "a debug channel is named debug.<channel> and is per-device" });
|
|
16072
16144
|
/**
|
|
16073
16145
|
* An armed window over one channel, as the document hands it to a mirror.
|
|
16074
16146
|
*
|
|
@@ -20043,6 +20115,33 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
20043
20115
|
}
|
|
20044
20116
|
]
|
|
20045
20117
|
},
|
|
20118
|
+
"do-not-disturb": {
|
|
20119
|
+
scope: "device",
|
|
20120
|
+
noun: t("Do not disturb", "Non disturbare"),
|
|
20121
|
+
actions: [{
|
|
20122
|
+
id: "dnd.on",
|
|
20123
|
+
method: "setEnabled",
|
|
20124
|
+
label: t("Do not disturb on", "Attiva Non disturbare"),
|
|
20125
|
+
phrase: t("Turn on Do not disturb on {device}", "Attiva Non disturbare su {device}"),
|
|
20126
|
+
icon: "bell-off",
|
|
20127
|
+
args: { enabled: true }
|
|
20128
|
+
}, {
|
|
20129
|
+
id: "dnd.off",
|
|
20130
|
+
method: "setEnabled",
|
|
20131
|
+
label: t("Do not disturb off", "Disattiva Non disturbare"),
|
|
20132
|
+
phrase: t("Turn off Do not disturb on {device}", "Disattiva Non disturbare su {device}"),
|
|
20133
|
+
icon: "bell",
|
|
20134
|
+
args: { enabled: false }
|
|
20135
|
+
}],
|
|
20136
|
+
state: [{
|
|
20137
|
+
kind: "boolean",
|
|
20138
|
+
field: "enabled",
|
|
20139
|
+
label: t("Do not disturb", "Non disturbare"),
|
|
20140
|
+
whenTrue: t("When Do not disturb turns on on {device}", "Quando {device} attiva Non disturbare"),
|
|
20141
|
+
whenFalse: t("When Do not disturb turns off on {device}", "Quando {device} disattiva Non disturbare"),
|
|
20142
|
+
icon: "bell-off"
|
|
20143
|
+
}]
|
|
20144
|
+
},
|
|
20046
20145
|
update: {
|
|
20047
20146
|
scope: "device",
|
|
20048
20147
|
noun: t("Firmware update", "Aggiornamento firmware"),
|
|
@@ -42253,14 +42352,16 @@ var DeviceIsLeafSchema = object({
|
|
|
42253
42352
|
});
|
|
42254
42353
|
/**
|
|
42255
42354
|
* True when the camera currently has a PARKED object matching `subjects` in at
|
|
42256
|
-
* least one of `zones
|
|
42355
|
+
* least one of `zones` (`minCount` of them, default one). Reads the zone-analytics snapshot through the same
|
|
42257
42356
|
* mirror as every other state leaf, so a dropped event never decides it (D49).
|
|
42258
42357
|
*/
|
|
42259
42358
|
var StationaryPresentLeafSchema = object({
|
|
42260
42359
|
kind: literal("stationary-present"),
|
|
42261
42360
|
deviceId: number().int().nonnegative(),
|
|
42262
42361
|
subjects: array(StationarySubjectSchema).min(1).optional(),
|
|
42263
|
-
zones: array(string().min(1)).min(1).optional()
|
|
42362
|
+
zones: array(string().min(1)).min(1).optional(),
|
|
42363
|
+
/** How many matching parked objects must be there; absent means one. */
|
|
42364
|
+
minCount: number().int().positive().optional()
|
|
42264
42365
|
});
|
|
42265
42366
|
/**
|
|
42266
42367
|
* The escape hatch: the bounded expression engine over named device bindings.
|
|
@@ -42772,6 +42873,28 @@ function convertLegacyRecipe(legacy) {
|
|
|
42772
42873
|
* it. The output type is always the new one.
|
|
42773
42874
|
*/
|
|
42774
42875
|
var AutomationRecipeSchema = union([CurrentAutomationRecipeSchema, LegacyAutomationRecipeSchema.transform(convertLegacyRecipe)]);
|
|
42876
|
+
var DETECTION_DESCRIPTIONS = {
|
|
42877
|
+
deviceId: "the camera that saw it",
|
|
42878
|
+
className: "what it saw",
|
|
42879
|
+
trackId: "the track",
|
|
42880
|
+
score: "how sure the detector was",
|
|
42881
|
+
label: "the label it matched (a name, a plate), empty when none"
|
|
42882
|
+
};
|
|
42883
|
+
var STATIONARY_DESCRIPTIONS = {
|
|
42884
|
+
deviceId: "the camera that saw it",
|
|
42885
|
+
className: "what it saw",
|
|
42886
|
+
zones: "the zones it is in",
|
|
42887
|
+
phase: "appeared or departed",
|
|
42888
|
+
entryId: "the stopped object"
|
|
42889
|
+
};
|
|
42890
|
+
function describe$1(descriptions) {
|
|
42891
|
+
return Object.entries(descriptions).map(([name, description]) => ({
|
|
42892
|
+
name,
|
|
42893
|
+
description
|
|
42894
|
+
}));
|
|
42895
|
+
}
|
|
42896
|
+
describe$1(DETECTION_DESCRIPTIONS);
|
|
42897
|
+
describe$1(STATIONARY_DESCRIPTIONS);
|
|
42775
42898
|
new Set(Object.values(COCO_TO_MACRO.mapping));
|
|
42776
42899
|
/**
|
|
42777
42900
|
* Schedulers (D983) — an entity that performs actions over the day.
|
|
@@ -51559,6 +51682,45 @@ var deviceProviderCapability = {
|
|
|
51559
51682
|
}
|
|
51560
51683
|
};
|
|
51561
51684
|
/**
|
|
51685
|
+
* What the passive listener of `local-network` saw on the wire, before any
|
|
51686
|
+
* provider classified it. Device-manager turns an observation into the hits
|
|
51687
|
+
* of the providers whose declared discovery modes it matches.
|
|
51688
|
+
*/
|
|
51689
|
+
var DiscoveryObservationSchema = discriminatedUnion("kind", [object({
|
|
51690
|
+
kind: literal("mdns"),
|
|
51691
|
+
/** Normalised DNS-SD service type, e.g. `_esphomelib._tcp`. */
|
|
51692
|
+
serviceType: string(),
|
|
51693
|
+
instance: string(),
|
|
51694
|
+
host: string(),
|
|
51695
|
+
/** The A record address when the announcement carried one. */
|
|
51696
|
+
address: string().nullable(),
|
|
51697
|
+
port: number().int(),
|
|
51698
|
+
txt: record(string(), string())
|
|
51699
|
+
}), object({
|
|
51700
|
+
kind: literal("ssdp"),
|
|
51701
|
+
/** Sender address of the datagram. */
|
|
51702
|
+
host: string(),
|
|
51703
|
+
port: number().int(),
|
|
51704
|
+
/** `NT` of a NOTIFY, `ST` of a search response. */
|
|
51705
|
+
target: string(),
|
|
51706
|
+
headers: record(string(), string())
|
|
51707
|
+
})]);
|
|
51708
|
+
object({
|
|
51709
|
+
addonId: string(),
|
|
51710
|
+
candidate: DiscoveryCandidateSchema,
|
|
51711
|
+
firstSeenAt: number(),
|
|
51712
|
+
lastSeenAt: number(),
|
|
51713
|
+
dismissed: boolean()
|
|
51714
|
+
});
|
|
51715
|
+
var DiscoveryProposalSchema = object({
|
|
51716
|
+
id: string(),
|
|
51717
|
+
addonId: string(),
|
|
51718
|
+
candidate: DiscoveryCandidateSchema,
|
|
51719
|
+
firstSeenAt: number(),
|
|
51720
|
+
lastSeenAt: number(),
|
|
51721
|
+
dismissed: boolean()
|
|
51722
|
+
});
|
|
51723
|
+
/**
|
|
51562
51724
|
* Device Manager capability — hub-side singleton that unifies device persistence,
|
|
51563
51725
|
* live registry access, and all management operations into a single tRPC surface.
|
|
51564
51726
|
*
|
|
@@ -52287,6 +52449,19 @@ method(object({
|
|
|
52287
52449
|
}), object({ candidates: array(DiscoveryCandidateSchema).readonly() }), {
|
|
52288
52450
|
kind: "mutation",
|
|
52289
52451
|
auth: "admin"
|
|
52452
|
+
}), method(object({}), object({ proposals: array(DiscoveryProposalSchema).readonly() }), { auth: "admin" }), method(object({ id: string() }), object({ dismissed: boolean() }), {
|
|
52453
|
+
kind: "mutation",
|
|
52454
|
+
auth: "admin"
|
|
52455
|
+
}), method(object({ observations: array(DiscoveryObservationSchema).max(512) }), object({ proposed: number().int() }), {
|
|
52456
|
+
kind: "mutation",
|
|
52457
|
+
auth: "admin"
|
|
52458
|
+
}), method(object({}), object({
|
|
52459
|
+
providers: number().int(),
|
|
52460
|
+
proposed: number().int()
|
|
52461
|
+
}), {
|
|
52462
|
+
kind: "mutation",
|
|
52463
|
+
auth: "admin",
|
|
52464
|
+
timeoutMs: 12e4
|
|
52290
52465
|
}), method(object({ addonId: string() }), object({ deviceType: _enum(DeviceType).nullable() }), { auth: "admin" }), method(object({ addonId: string() }), unknown(), { auth: "admin" }), method(object({
|
|
52291
52466
|
deviceId: number(),
|
|
52292
52467
|
key: string(),
|
|
@@ -53736,6 +53911,49 @@ method(_void(), paletteResultSchema, {
|
|
|
53736
53911
|
kind: "mutation",
|
|
53737
53912
|
auth: "admin"
|
|
53738
53913
|
});
|
|
53914
|
+
/**
|
|
53915
|
+
* do-not-disturb - whether a speaker or display holds back its own sounds
|
|
53916
|
+
* (announcements, notifications, alarms) until the operator lets it speak again.
|
|
53917
|
+
*
|
|
53918
|
+
* It is NOT part of `media-player`: a player is about what it plays and how
|
|
53919
|
+
* loud, while Do Not Disturb is a household switch the vendor keeps per device.
|
|
53920
|
+
* `enabled` is null when the vendor has not said (never a guess of `false`).
|
|
53921
|
+
*/
|
|
53922
|
+
var DoNotDisturbStatusSchema = object({
|
|
53923
|
+
/** True while Do Not Disturb is on; null when unknown. */
|
|
53924
|
+
enabled: boolean().nullable().meta({ label: "Do not disturb" }),
|
|
53925
|
+
/** Ms epoch of the last read or write that set `enabled`. */
|
|
53926
|
+
lastChangedAt: number()
|
|
53927
|
+
});
|
|
53928
|
+
var doNotDisturbCapability = {
|
|
53929
|
+
name: "do-not-disturb",
|
|
53930
|
+
scope: "device",
|
|
53931
|
+
deviceNative: true,
|
|
53932
|
+
mode: "singleton",
|
|
53933
|
+
deviceTypes: [DeviceType.MediaPlayer],
|
|
53934
|
+
methods: { setEnabled: method(object({
|
|
53935
|
+
deviceId: number().int(),
|
|
53936
|
+
enabled: boolean()
|
|
53937
|
+
}), _void(), {
|
|
53938
|
+
kind: "mutation",
|
|
53939
|
+
auth: "protected"
|
|
53940
|
+
}) },
|
|
53941
|
+
status: {
|
|
53942
|
+
schema: DoNotDisturbStatusSchema,
|
|
53943
|
+
kind: "push"
|
|
53944
|
+
},
|
|
53945
|
+
runtimeState: DoNotDisturbStatusSchema,
|
|
53946
|
+
/**
|
|
53947
|
+
* Runtime-state durability: **session** - the vendor owns the switch and the
|
|
53948
|
+
* device re-reads it on the next poll, so a restored value would only be stale.
|
|
53949
|
+
*
|
|
53950
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
53951
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
53952
|
+
*/
|
|
53953
|
+
durability: "session",
|
|
53954
|
+
/** History (D850): when Do Not Disturb was switched on and off. */
|
|
53955
|
+
history: { fields: { enabled: { kind: "boolean" } } }
|
|
53956
|
+
};
|
|
53739
53957
|
/** Pulse override: a rising edge advances `lastPressedAt` and the press count. */
|
|
53740
53958
|
var doorbellCustomize = {
|
|
53741
53959
|
version: 1,
|
|
@@ -56337,6 +56555,14 @@ var LlmGenerateBaseInputSchema = object({
|
|
|
56337
56555
|
topP: number().min(0).max(1).optional(),
|
|
56338
56556
|
/** Per-call override of the profile default (top-k sampling). */
|
|
56339
56557
|
topK: number().int().positive().optional(),
|
|
56558
|
+
/** Per-call override of `profile.reasoningEffort`. Sent only to a kind whose
|
|
56559
|
+
* descriptor offers the field; a kind that does not never sends it. */
|
|
56560
|
+
reasoningEffort: _enum([
|
|
56561
|
+
"off",
|
|
56562
|
+
"low",
|
|
56563
|
+
"medium",
|
|
56564
|
+
"high"
|
|
56565
|
+
]).optional(),
|
|
56340
56566
|
/** Per-call override of `profile.timeoutMs` — the total generation bound. */
|
|
56341
56567
|
timeoutMs: number().int().positive().optional(),
|
|
56342
56568
|
/** Per-call override; beats both the consumer table and the profile. */
|
|
@@ -56628,7 +56854,10 @@ var LlmProfileKindSchema = string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "a kind i
|
|
|
56628
56854
|
var LlmModelFeaturesSchema = object({
|
|
56629
56855
|
vision: boolean(),
|
|
56630
56856
|
tools: boolean(),
|
|
56631
|
-
streaming: boolean()
|
|
56857
|
+
streaming: boolean(),
|
|
56858
|
+
/** Whether the model thinks before it answers. `null` = the endpoint does not
|
|
56859
|
+
* say; an editor then still offers the switch (unknown is not "no"). */
|
|
56860
|
+
reasoning: boolean().nullable().optional()
|
|
56632
56861
|
});
|
|
56633
56862
|
/** One model a provider offers. `features` overrides the kind's defaults, per field. */
|
|
56634
56863
|
var LlmModelInfoSchema = object({
|
|
@@ -74838,9 +75067,17 @@ var ServerUpdateActionResultSchema = object({
|
|
|
74838
75067
|
*/
|
|
74839
75068
|
requiredAddonUpdates: array(RequiredAddonUpdateSchema).optional()
|
|
74840
75069
|
});
|
|
74841
|
-
var LaunchOverridesSchema = object({
|
|
74842
|
-
/** The persisted heap ceiling in MB, or `null` when none is set. */
|
|
74843
|
-
heapMb: number().int().nullable()
|
|
75070
|
+
var LaunchOverridesSchema = object({
|
|
75071
|
+
/** The persisted heap ceiling in MB, or `null` when none is set. */
|
|
75072
|
+
heapMb: number().int().nullable(),
|
|
75073
|
+
/** The persisted hub-main RSS budget in MB, or `null` when none is set. */
|
|
75074
|
+
rssBudgetMb: number().int().nullable()
|
|
75075
|
+
});
|
|
75076
|
+
var SetLaunchOverridesInputSchema = object({
|
|
75077
|
+
heapMb: number().int().min(512).max(65536).nullable(),
|
|
75078
|
+
/** Omitted keeps the stored budget; `null` clears it. */
|
|
75079
|
+
rssBudgetMb: number().int().min(512).max(65536).nullable().optional()
|
|
75080
|
+
});
|
|
74844
75081
|
var SetLaunchOverridesResultSchema = LaunchOverridesSchema.extend({
|
|
74845
75082
|
/** Always true: the override is read at launch, not by the running process. */
|
|
74846
75083
|
restartRequired: boolean() });
|
|
@@ -74869,7 +75106,7 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
74869
75106
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
74870
75107
|
kind: "mutation",
|
|
74871
75108
|
auth: "admin"
|
|
74872
|
-
}), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(
|
|
75109
|
+
}), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(SetLaunchOverridesInputSchema, SetLaunchOverridesResultSchema, {
|
|
74873
75110
|
kind: "mutation",
|
|
74874
75111
|
auth: "admin"
|
|
74875
75112
|
});
|
|
@@ -76572,6 +76809,40 @@ var LoggingSettingsStateSchema = object({
|
|
|
76572
76809
|
opsLogRetentionDays: number().int().min(0),
|
|
76573
76810
|
persisted: boolean()
|
|
76574
76811
|
});
|
|
76812
|
+
/**
|
|
76813
|
+
* Debug WATCH — a short, per-device window over `debug.<channel>` lines.
|
|
76814
|
+
*
|
|
76815
|
+
* `start` opens (or re-arms) a 10 minute window; `rearm` extends a LIVE one
|
|
76816
|
+
* and never revives a lapsed one; `stop` closes it; `list` only reads. No
|
|
76817
|
+
* chain of re-arms outlives 60 minutes from the first start. The hub holds the
|
|
76818
|
+
* watches in memory and pushes the interest to every node, so a watch lapses
|
|
76819
|
+
* by itself and survives nothing — a restart is a stop.
|
|
76820
|
+
*/
|
|
76821
|
+
var DebugWatchInputSchema = object({
|
|
76822
|
+
action: _enum([
|
|
76823
|
+
"list",
|
|
76824
|
+
"start",
|
|
76825
|
+
"rearm",
|
|
76826
|
+
"stop"
|
|
76827
|
+
]),
|
|
76828
|
+
/** Full channel names, `debug.<channel>`, each declared with `kind: 'debug'`. */
|
|
76829
|
+
channels: array(string().min(1)).readonly().default([]),
|
|
76830
|
+
/** Numeric device ids. Required (non-empty) for `start`. */
|
|
76831
|
+
deviceIds: array(number().int()).readonly().default([])
|
|
76832
|
+
});
|
|
76833
|
+
var DebugWatchStateSchema = object({
|
|
76834
|
+
channel: string(),
|
|
76835
|
+
deviceIds: array(number().int()).readonly(),
|
|
76836
|
+
startedAtMs: number(),
|
|
76837
|
+
untilMs: number(),
|
|
76838
|
+
capAtMs: number()
|
|
76839
|
+
});
|
|
76840
|
+
var DebugWatchResultSchema = object({
|
|
76841
|
+
nowMs: number(),
|
|
76842
|
+
watches: array(DebugWatchStateSchema).readonly(),
|
|
76843
|
+
/** Channels a `rearm` found already lapsed: nothing was revived. */
|
|
76844
|
+
lapsed: array(string()).readonly()
|
|
76845
|
+
});
|
|
76575
76846
|
method(_void(), SystemInfoSchema), method(_void(), HealthStatusSchema), method(_void(), FeatureManifestSchema), method(_void(), array(NetworkAddressSchema).readonly()), method(_void(), unknown().nullable(), { auth: "admin" }), method(record(string(), unknown()), _null(), {
|
|
76576
76847
|
kind: "mutation",
|
|
76577
76848
|
auth: "admin"
|
|
@@ -76587,6 +76858,9 @@ method(_void(), SystemInfoSchema), method(_void(), HealthStatusSchema), method(_
|
|
|
76587
76858
|
}), method(_void(), RequestCensusStatusSchema, { auth: "admin" }), method(_void(), array(ReportedLoadContributionSchema).readonly(), { auth: "admin" }), method(_void(), array(ReportedFailureContributionSchema).readonly(), { auth: "admin" }), method(GetLoggingSettingsInputSchema, LoggingSettingsStateSchema, { auth: "admin" }), method(SetLoggingSettingsInputSchema, LoggingSettingsStateSchema, {
|
|
76588
76859
|
kind: "mutation",
|
|
76589
76860
|
auth: "admin"
|
|
76861
|
+
}), method(DebugWatchInputSchema, DebugWatchResultSchema, {
|
|
76862
|
+
kind: "mutation",
|
|
76863
|
+
auth: "admin"
|
|
76590
76864
|
});
|
|
76591
76865
|
/**
|
|
76592
76866
|
* Tamper / case-open detection sensor. Drives Home Assistant
|
|
@@ -80138,6 +80412,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
80138
80412
|
deviceDiscovery: deviceDiscoveryCapability,
|
|
80139
80413
|
deviceStatus: deviceStatusCapability,
|
|
80140
80414
|
dishwasher: dishwasherCapability,
|
|
80415
|
+
doNotDisturb: doNotDisturbCapability,
|
|
80141
80416
|
doorbell: doorbellCapability,
|
|
80142
80417
|
enumSensor: enumSensorCapability,
|
|
80143
80418
|
eventEmitter: eventEmitterCapability,
|
|
@@ -83695,6 +83970,13 @@ Object.freeze({
|
|
|
83695
83970
|
access: "view",
|
|
83696
83971
|
role: "admin"
|
|
83697
83972
|
},
|
|
83973
|
+
"deviceManager.dismissDiscoveryProposal": {
|
|
83974
|
+
capName: "device-manager",
|
|
83975
|
+
capScope: "system",
|
|
83976
|
+
addonId: null,
|
|
83977
|
+
access: "create",
|
|
83978
|
+
role: "admin"
|
|
83979
|
+
},
|
|
83698
83980
|
"deviceManager.enable": {
|
|
83699
83981
|
capName: "device-manager",
|
|
83700
83982
|
capScope: "system",
|
|
@@ -83877,6 +84159,13 @@ Object.freeze({
|
|
|
83877
84159
|
access: "view",
|
|
83878
84160
|
role: "viewer"
|
|
83879
84161
|
},
|
|
84162
|
+
"deviceManager.listDiscoveryProposals": {
|
|
84163
|
+
capName: "device-manager",
|
|
84164
|
+
capScope: "system",
|
|
84165
|
+
addonId: null,
|
|
84166
|
+
access: "view",
|
|
84167
|
+
role: "admin"
|
|
84168
|
+
},
|
|
83880
84169
|
"deviceManager.listLocationDescriptions": {
|
|
83881
84170
|
capName: "device-manager",
|
|
83882
84171
|
capScope: "system",
|
|
@@ -84031,6 +84320,13 @@ Object.freeze({
|
|
|
84031
84320
|
access: "create",
|
|
84032
84321
|
role: "admin"
|
|
84033
84322
|
},
|
|
84323
|
+
"deviceManager.reportDiscoveryObservations": {
|
|
84324
|
+
capName: "device-manager",
|
|
84325
|
+
capScope: "system",
|
|
84326
|
+
addonId: null,
|
|
84327
|
+
access: "create",
|
|
84328
|
+
role: "admin"
|
|
84329
|
+
},
|
|
84034
84330
|
"deviceManager.runDeviceAction": {
|
|
84035
84331
|
capName: "device-manager",
|
|
84036
84332
|
capScope: "system",
|
|
@@ -84038,6 +84334,13 @@ Object.freeze({
|
|
|
84038
84334
|
access: "create",
|
|
84039
84335
|
role: "admin"
|
|
84040
84336
|
},
|
|
84337
|
+
"deviceManager.runDiscoverySweep": {
|
|
84338
|
+
capName: "device-manager",
|
|
84339
|
+
capScope: "system",
|
|
84340
|
+
addonId: null,
|
|
84341
|
+
access: "create",
|
|
84342
|
+
role: "admin"
|
|
84343
|
+
},
|
|
84041
84344
|
"deviceManager.setChildLayout": {
|
|
84042
84345
|
capName: "device-manager",
|
|
84043
84346
|
capScope: "system",
|
|
@@ -84591,6 +84894,20 @@ Object.freeze({
|
|
|
84591
84894
|
access: "create",
|
|
84592
84895
|
role: "admin"
|
|
84593
84896
|
},
|
|
84897
|
+
"doNotDisturb.getStatus": {
|
|
84898
|
+
capName: "do-not-disturb",
|
|
84899
|
+
capScope: "device",
|
|
84900
|
+
addonId: null,
|
|
84901
|
+
access: "view",
|
|
84902
|
+
role: "viewer"
|
|
84903
|
+
},
|
|
84904
|
+
"doNotDisturb.setEnabled": {
|
|
84905
|
+
capName: "do-not-disturb",
|
|
84906
|
+
capScope: "device",
|
|
84907
|
+
addonId: null,
|
|
84908
|
+
access: "create",
|
|
84909
|
+
role: "viewer"
|
|
84910
|
+
},
|
|
84594
84911
|
"doorbell.getStatus": {
|
|
84595
84912
|
capName: "doorbell",
|
|
84596
84913
|
capScope: "device",
|
|
@@ -90611,6 +90928,13 @@ Object.freeze({
|
|
|
90611
90928
|
access: "create",
|
|
90612
90929
|
role: "viewer"
|
|
90613
90930
|
},
|
|
90931
|
+
"system.debugWatch": {
|
|
90932
|
+
capName: "system",
|
|
90933
|
+
capScope: "system",
|
|
90934
|
+
addonId: null,
|
|
90935
|
+
access: "create",
|
|
90936
|
+
role: "admin"
|
|
90937
|
+
},
|
|
90614
90938
|
"system.detectSiteLocation": {
|
|
90615
90939
|
capName: "system",
|
|
90616
90940
|
capScope: "system",
|
|
@@ -92790,6 +93114,16 @@ Object.freeze({
|
|
|
92790
93114
|
form: "single",
|
|
92791
93115
|
optional: false
|
|
92792
93116
|
}],
|
|
93117
|
+
"doNotDisturb.getStatus": [{
|
|
93118
|
+
name: "deviceId",
|
|
93119
|
+
form: "single",
|
|
93120
|
+
optional: false
|
|
93121
|
+
}],
|
|
93122
|
+
"doNotDisturb.setEnabled": [{
|
|
93123
|
+
name: "deviceId",
|
|
93124
|
+
form: "single",
|
|
93125
|
+
optional: false
|
|
93126
|
+
}],
|
|
92793
93127
|
"doorbell.getStatus": [{
|
|
92794
93128
|
name: "deviceId",
|
|
92795
93129
|
form: "single",
|
|
@@ -94530,6 +94864,11 @@ Object.freeze({
|
|
|
94530
94864
|
form: "single",
|
|
94531
94865
|
optional: false
|
|
94532
94866
|
}],
|
|
94867
|
+
"system.debugWatch": [{
|
|
94868
|
+
name: "deviceIds",
|
|
94869
|
+
form: "array",
|
|
94870
|
+
optional: true
|
|
94871
|
+
}],
|
|
94533
94872
|
"tamper.getStatus": [{
|
|
94534
94873
|
name: "deviceId",
|
|
94535
94874
|
form: "single",
|
|
@@ -97014,6 +97353,12 @@ Object.defineProperty(exports, "createEvent", {
|
|
|
97014
97353
|
return createEvent;
|
|
97015
97354
|
}
|
|
97016
97355
|
});
|
|
97356
|
+
Object.defineProperty(exports, "defineAddonMigrations", {
|
|
97357
|
+
enumerable: true,
|
|
97358
|
+
get: function() {
|
|
97359
|
+
return defineAddonMigrations;
|
|
97360
|
+
}
|
|
97361
|
+
});
|
|
97017
97362
|
Object.defineProperty(exports, "defineEntryKind", {
|
|
97018
97363
|
enumerable: true,
|
|
97019
97364
|
get: function() {
|
|
@@ -97218,6 +97563,12 @@ Object.defineProperty(exports, "powerMeterCapability", {
|
|
|
97218
97563
|
return powerMeterCapability;
|
|
97219
97564
|
}
|
|
97220
97565
|
});
|
|
97566
|
+
Object.defineProperty(exports, "preconditionOf", {
|
|
97567
|
+
enumerable: true,
|
|
97568
|
+
get: function() {
|
|
97569
|
+
return preconditionOf;
|
|
97570
|
+
}
|
|
97571
|
+
});
|
|
97221
97572
|
Object.defineProperty(exports, "prepareNotification", {
|
|
97222
97573
|
enumerable: true,
|
|
97223
97574
|
get: function() {
|