@camstack/addon-provider-homematic 1.2.53 → 1.2.56
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 +82 -7
- package/dist/addon.mjs +82 -7
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -7727,7 +7727,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7727
7727
|
"quota",
|
|
7728
7728
|
"manual",
|
|
7729
7729
|
"operator",
|
|
7730
|
-
"maintenance"
|
|
7730
|
+
"maintenance",
|
|
7731
|
+
"orphaned-device"
|
|
7731
7732
|
]);
|
|
7732
7733
|
/** One audit row, shared verbatim by both domains. */
|
|
7733
7734
|
var OpsLogEntrySchema = object({
|
|
@@ -13088,10 +13089,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
13088
13089
|
deviceId: number(),
|
|
13089
13090
|
data: record(string(), unknown())
|
|
13090
13091
|
});
|
|
13092
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
13093
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
13094
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
13095
|
+
"off",
|
|
13096
|
+
"on",
|
|
13097
|
+
"not-offered",
|
|
13098
|
+
"unreachable"
|
|
13099
|
+
]);
|
|
13100
|
+
var MigrateSwitchReportSchema = object({
|
|
13101
|
+
deviceId: number(),
|
|
13102
|
+
switchId: CameraSwitchIdSchema,
|
|
13103
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
13104
|
+
detail: string().optional()
|
|
13105
|
+
});
|
|
13106
|
+
var MigrateDeviceResultSchema = object({
|
|
13107
|
+
sourceId: number(),
|
|
13108
|
+
targetId: number(),
|
|
13109
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
13110
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
13111
|
+
* value meaning the replaced hardware is quiet. */
|
|
13112
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
13113
|
+
swapped: boolean()
|
|
13114
|
+
});
|
|
13091
13115
|
method(object({
|
|
13092
13116
|
addonId: string(),
|
|
13093
13117
|
stableId: string()
|
|
13094
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
13118
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
13119
|
+
sourceId: number(),
|
|
13120
|
+
targetId: number()
|
|
13121
|
+
}), MigrateDeviceResultSchema, {
|
|
13122
|
+
kind: "mutation",
|
|
13123
|
+
auth: "admin"
|
|
13124
|
+
}), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
|
|
13095
13125
|
deviceId: number(),
|
|
13096
13126
|
name: string()
|
|
13097
13127
|
}), _void(), {
|
|
@@ -13566,6 +13596,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
13566
13596
|
auth: "admin"
|
|
13567
13597
|
});
|
|
13568
13598
|
/**
|
|
13599
|
+
* Transport bounds for AI capability methods.
|
|
13600
|
+
*
|
|
13601
|
+
* Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
|
|
13602
|
+
* each other: declaring the constant in either one hands the other `undefined`
|
|
13603
|
+
* at module-init time, and an undefined `timeoutMs` silently falls back to the
|
|
13604
|
+
* kernel's 60 s default — the exact failure this constant exists to prevent,
|
|
13605
|
+
* reintroduced invisibly. Found by the guard, not by review.
|
|
13606
|
+
*/
|
|
13607
|
+
/**
|
|
13608
|
+
* Ceiling for a cap method that runs inference or loads a model.
|
|
13609
|
+
*
|
|
13610
|
+
* Deliberately far above anything the AI layer itself may wait for (a summary
|
|
13611
|
+
* asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
|
|
13612
|
+
* never be the layer that gives up first: when it does, the failure is
|
|
13613
|
+
* reported as a transport error for a model that was still thinking, naming
|
|
13614
|
+
* the wrong layer and hiding the real one.
|
|
13615
|
+
*
|
|
13616
|
+
* Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
|
|
13617
|
+
* more on a cold model load. With no declaration every digest failed at
|
|
13618
|
+
* exactly 60 s and shipped without its text.
|
|
13619
|
+
*
|
|
13620
|
+
* A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
|
|
13621
|
+
* the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
|
|
13622
|
+
* decide when to stop, because only they can say WHY.
|
|
13623
|
+
*/
|
|
13624
|
+
var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
|
|
13625
|
+
/** A multi-gigabyte download. An hour is not generous, it is honest. */
|
|
13626
|
+
var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
|
|
13627
|
+
/**
|
|
13569
13628
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
13570
13629
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
13571
13630
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -13837,16 +13896,19 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
13837
13896
|
timeoutMs: number().int().positive().optional()
|
|
13838
13897
|
}), LlmGenerateResultSchema, {
|
|
13839
13898
|
kind: "mutation",
|
|
13840
|
-
auth: "admin"
|
|
13899
|
+
auth: "admin",
|
|
13900
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13841
13901
|
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
13842
13902
|
kind: "mutation",
|
|
13843
|
-
auth: "admin"
|
|
13903
|
+
auth: "admin",
|
|
13904
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13844
13905
|
}), method(object({}), _void(), {
|
|
13845
13906
|
kind: "mutation",
|
|
13846
13907
|
auth: "admin"
|
|
13847
13908
|
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
13848
13909
|
kind: "mutation",
|
|
13849
|
-
auth: "admin"
|
|
13910
|
+
auth: "admin",
|
|
13911
|
+
timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
|
|
13850
13912
|
}), method(object({ file: string() }), _void(), {
|
|
13851
13913
|
kind: "mutation",
|
|
13852
13914
|
auth: "admin"
|
|
@@ -14014,7 +14076,13 @@ var ProfileRefInputSchema = object({
|
|
|
14014
14076
|
addonId: string(),
|
|
14015
14077
|
profileId: string()
|
|
14016
14078
|
});
|
|
14017
|
-
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14079
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14080
|
+
kind: "mutation",
|
|
14081
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14082
|
+
}), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
|
|
14083
|
+
kind: "mutation",
|
|
14084
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14085
|
+
}), method(object({
|
|
14018
14086
|
addonId: string().optional(),
|
|
14019
14087
|
requestId: string()
|
|
14020
14088
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -14025,7 +14093,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
|
|
|
14025
14093
|
auth: "admin"
|
|
14026
14094
|
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
14027
14095
|
kind: "mutation",
|
|
14028
|
-
auth: "admin"
|
|
14096
|
+
auth: "admin",
|
|
14097
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14029
14098
|
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
14030
14099
|
selector: LlmDefaultSelectorSchema,
|
|
14031
14100
|
profileId: string().nullable()
|
|
@@ -34086,6 +34155,12 @@ Object.freeze({
|
|
|
34086
34155
|
addonId: null,
|
|
34087
34156
|
access: "view"
|
|
34088
34157
|
},
|
|
34158
|
+
"deviceManager.migrateDevice": {
|
|
34159
|
+
capName: "device-manager",
|
|
34160
|
+
capScope: "system",
|
|
34161
|
+
addonId: null,
|
|
34162
|
+
access: "create"
|
|
34163
|
+
},
|
|
34089
34164
|
"deviceManager.persistConfig": {
|
|
34090
34165
|
capName: "device-manager",
|
|
34091
34166
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -7728,7 +7728,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7728
7728
|
"quota",
|
|
7729
7729
|
"manual",
|
|
7730
7730
|
"operator",
|
|
7731
|
-
"maintenance"
|
|
7731
|
+
"maintenance",
|
|
7732
|
+
"orphaned-device"
|
|
7732
7733
|
]);
|
|
7733
7734
|
/** One audit row, shared verbatim by both domains. */
|
|
7734
7735
|
var OpsLogEntrySchema = object({
|
|
@@ -13089,10 +13090,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
13089
13090
|
deviceId: number(),
|
|
13090
13091
|
data: record(string(), unknown())
|
|
13091
13092
|
});
|
|
13093
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
13094
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
13095
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
13096
|
+
"off",
|
|
13097
|
+
"on",
|
|
13098
|
+
"not-offered",
|
|
13099
|
+
"unreachable"
|
|
13100
|
+
]);
|
|
13101
|
+
var MigrateSwitchReportSchema = object({
|
|
13102
|
+
deviceId: number(),
|
|
13103
|
+
switchId: CameraSwitchIdSchema,
|
|
13104
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
13105
|
+
detail: string().optional()
|
|
13106
|
+
});
|
|
13107
|
+
var MigrateDeviceResultSchema = object({
|
|
13108
|
+
sourceId: number(),
|
|
13109
|
+
targetId: number(),
|
|
13110
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
13111
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
13112
|
+
* value meaning the replaced hardware is quiet. */
|
|
13113
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
13114
|
+
swapped: boolean()
|
|
13115
|
+
});
|
|
13092
13116
|
method(object({
|
|
13093
13117
|
addonId: string(),
|
|
13094
13118
|
stableId: string()
|
|
13095
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
13119
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
13120
|
+
sourceId: number(),
|
|
13121
|
+
targetId: number()
|
|
13122
|
+
}), MigrateDeviceResultSchema, {
|
|
13123
|
+
kind: "mutation",
|
|
13124
|
+
auth: "admin"
|
|
13125
|
+
}), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
|
|
13096
13126
|
deviceId: number(),
|
|
13097
13127
|
name: string()
|
|
13098
13128
|
}), _void(), {
|
|
@@ -13567,6 +13597,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
13567
13597
|
auth: "admin"
|
|
13568
13598
|
});
|
|
13569
13599
|
/**
|
|
13600
|
+
* Transport bounds for AI capability methods.
|
|
13601
|
+
*
|
|
13602
|
+
* Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
|
|
13603
|
+
* each other: declaring the constant in either one hands the other `undefined`
|
|
13604
|
+
* at module-init time, and an undefined `timeoutMs` silently falls back to the
|
|
13605
|
+
* kernel's 60 s default — the exact failure this constant exists to prevent,
|
|
13606
|
+
* reintroduced invisibly. Found by the guard, not by review.
|
|
13607
|
+
*/
|
|
13608
|
+
/**
|
|
13609
|
+
* Ceiling for a cap method that runs inference or loads a model.
|
|
13610
|
+
*
|
|
13611
|
+
* Deliberately far above anything the AI layer itself may wait for (a summary
|
|
13612
|
+
* asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
|
|
13613
|
+
* never be the layer that gives up first: when it does, the failure is
|
|
13614
|
+
* reported as a transport error for a model that was still thinking, naming
|
|
13615
|
+
* the wrong layer and hiding the real one.
|
|
13616
|
+
*
|
|
13617
|
+
* Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
|
|
13618
|
+
* more on a cold model load. With no declaration every digest failed at
|
|
13619
|
+
* exactly 60 s and shipped without its text.
|
|
13620
|
+
*
|
|
13621
|
+
* A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
|
|
13622
|
+
* the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
|
|
13623
|
+
* decide when to stop, because only they can say WHY.
|
|
13624
|
+
*/
|
|
13625
|
+
var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
|
|
13626
|
+
/** A multi-gigabyte download. An hour is not generous, it is honest. */
|
|
13627
|
+
var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
|
|
13628
|
+
/**
|
|
13570
13629
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
13571
13630
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
13572
13631
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -13838,16 +13897,19 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
13838
13897
|
timeoutMs: number().int().positive().optional()
|
|
13839
13898
|
}), LlmGenerateResultSchema, {
|
|
13840
13899
|
kind: "mutation",
|
|
13841
|
-
auth: "admin"
|
|
13900
|
+
auth: "admin",
|
|
13901
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13842
13902
|
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
13843
13903
|
kind: "mutation",
|
|
13844
|
-
auth: "admin"
|
|
13904
|
+
auth: "admin",
|
|
13905
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13845
13906
|
}), method(object({}), _void(), {
|
|
13846
13907
|
kind: "mutation",
|
|
13847
13908
|
auth: "admin"
|
|
13848
13909
|
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
13849
13910
|
kind: "mutation",
|
|
13850
|
-
auth: "admin"
|
|
13911
|
+
auth: "admin",
|
|
13912
|
+
timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
|
|
13851
13913
|
}), method(object({ file: string() }), _void(), {
|
|
13852
13914
|
kind: "mutation",
|
|
13853
13915
|
auth: "admin"
|
|
@@ -14015,7 +14077,13 @@ var ProfileRefInputSchema = object({
|
|
|
14015
14077
|
addonId: string(),
|
|
14016
14078
|
profileId: string()
|
|
14017
14079
|
});
|
|
14018
|
-
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14080
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14081
|
+
kind: "mutation",
|
|
14082
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14083
|
+
}), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
|
|
14084
|
+
kind: "mutation",
|
|
14085
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14086
|
+
}), method(object({
|
|
14019
14087
|
addonId: string().optional(),
|
|
14020
14088
|
requestId: string()
|
|
14021
14089
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -14026,7 +14094,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
|
|
|
14026
14094
|
auth: "admin"
|
|
14027
14095
|
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
14028
14096
|
kind: "mutation",
|
|
14029
|
-
auth: "admin"
|
|
14097
|
+
auth: "admin",
|
|
14098
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14030
14099
|
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
14031
14100
|
selector: LlmDefaultSelectorSchema,
|
|
14032
14101
|
profileId: string().nullable()
|
|
@@ -34087,6 +34156,12 @@ Object.freeze({
|
|
|
34087
34156
|
addonId: null,
|
|
34088
34157
|
access: "view"
|
|
34089
34158
|
},
|
|
34159
|
+
"deviceManager.migrateDevice": {
|
|
34160
|
+
capName: "device-manager",
|
|
34161
|
+
capScope: "system",
|
|
34162
|
+
addonId: null,
|
|
34163
|
+
access: "create"
|
|
34164
|
+
},
|
|
34090
34165
|
"deviceManager.persistConfig": {
|
|
34091
34166
|
capName: "device-manager",
|
|
34092
34167
|
capScope: "system",
|
package/package.json
CHANGED