@camstack/addon-provider-rademacher 0.2.51 → 0.2.54
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
|
@@ -8703,7 +8703,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
8703
8703
|
"quota",
|
|
8704
8704
|
"manual",
|
|
8705
8705
|
"operator",
|
|
8706
|
-
"maintenance"
|
|
8706
|
+
"maintenance",
|
|
8707
|
+
"orphaned-device"
|
|
8707
8708
|
]);
|
|
8708
8709
|
/** One audit row, shared verbatim by both domains. */
|
|
8709
8710
|
var OpsLogEntrySchema = object({
|
|
@@ -13998,10 +13999,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
13998
13999
|
deviceId: number(),
|
|
13999
14000
|
data: record(string(), unknown())
|
|
14000
14001
|
});
|
|
14002
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
14003
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
14004
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
14005
|
+
"off",
|
|
14006
|
+
"on",
|
|
14007
|
+
"not-offered",
|
|
14008
|
+
"unreachable"
|
|
14009
|
+
]);
|
|
14010
|
+
var MigrateSwitchReportSchema = object({
|
|
14011
|
+
deviceId: number(),
|
|
14012
|
+
switchId: CameraSwitchIdSchema,
|
|
14013
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
14014
|
+
detail: string().optional()
|
|
14015
|
+
});
|
|
14016
|
+
var MigrateDeviceResultSchema = object({
|
|
14017
|
+
sourceId: number(),
|
|
14018
|
+
targetId: number(),
|
|
14019
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
14020
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
14021
|
+
* value meaning the replaced hardware is quiet. */
|
|
14022
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
14023
|
+
swapped: boolean()
|
|
14024
|
+
});
|
|
14001
14025
|
method(object({
|
|
14002
14026
|
addonId: string(),
|
|
14003
14027
|
stableId: string()
|
|
14004
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
14028
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
14029
|
+
sourceId: number(),
|
|
14030
|
+
targetId: number()
|
|
14031
|
+
}), MigrateDeviceResultSchema, {
|
|
14032
|
+
kind: "mutation",
|
|
14033
|
+
auth: "admin"
|
|
14034
|
+
}), 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({
|
|
14005
14035
|
deviceId: number(),
|
|
14006
14036
|
name: string()
|
|
14007
14037
|
}), _void(), {
|
|
@@ -14476,6 +14506,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
14476
14506
|
auth: "admin"
|
|
14477
14507
|
});
|
|
14478
14508
|
/**
|
|
14509
|
+
* Transport bounds for AI capability methods.
|
|
14510
|
+
*
|
|
14511
|
+
* Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
|
|
14512
|
+
* each other: declaring the constant in either one hands the other `undefined`
|
|
14513
|
+
* at module-init time, and an undefined `timeoutMs` silently falls back to the
|
|
14514
|
+
* kernel's 60 s default — the exact failure this constant exists to prevent,
|
|
14515
|
+
* reintroduced invisibly. Found by the guard, not by review.
|
|
14516
|
+
*/
|
|
14517
|
+
/**
|
|
14518
|
+
* Ceiling for a cap method that runs inference or loads a model.
|
|
14519
|
+
*
|
|
14520
|
+
* Deliberately far above anything the AI layer itself may wait for (a summary
|
|
14521
|
+
* asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
|
|
14522
|
+
* never be the layer that gives up first: when it does, the failure is
|
|
14523
|
+
* reported as a transport error for a model that was still thinking, naming
|
|
14524
|
+
* the wrong layer and hiding the real one.
|
|
14525
|
+
*
|
|
14526
|
+
* Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
|
|
14527
|
+
* more on a cold model load. With no declaration every digest failed at
|
|
14528
|
+
* exactly 60 s and shipped without its text.
|
|
14529
|
+
*
|
|
14530
|
+
* A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
|
|
14531
|
+
* the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
|
|
14532
|
+
* decide when to stop, because only they can say WHY.
|
|
14533
|
+
*/
|
|
14534
|
+
var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
|
|
14535
|
+
/** A multi-gigabyte download. An hour is not generous, it is honest. */
|
|
14536
|
+
var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
|
|
14537
|
+
/**
|
|
14479
14538
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
14480
14539
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
14481
14540
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -14747,16 +14806,19 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
14747
14806
|
timeoutMs: number().int().positive().optional()
|
|
14748
14807
|
}), LlmGenerateResultSchema, {
|
|
14749
14808
|
kind: "mutation",
|
|
14750
|
-
auth: "admin"
|
|
14809
|
+
auth: "admin",
|
|
14810
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14751
14811
|
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
14752
14812
|
kind: "mutation",
|
|
14753
|
-
auth: "admin"
|
|
14813
|
+
auth: "admin",
|
|
14814
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14754
14815
|
}), method(object({}), _void(), {
|
|
14755
14816
|
kind: "mutation",
|
|
14756
14817
|
auth: "admin"
|
|
14757
14818
|
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
14758
14819
|
kind: "mutation",
|
|
14759
|
-
auth: "admin"
|
|
14820
|
+
auth: "admin",
|
|
14821
|
+
timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
|
|
14760
14822
|
}), method(object({ file: string() }), _void(), {
|
|
14761
14823
|
kind: "mutation",
|
|
14762
14824
|
auth: "admin"
|
|
@@ -14924,7 +14986,13 @@ var ProfileRefInputSchema = object({
|
|
|
14924
14986
|
addonId: string(),
|
|
14925
14987
|
profileId: string()
|
|
14926
14988
|
});
|
|
14927
|
-
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14989
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14990
|
+
kind: "mutation",
|
|
14991
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14992
|
+
}), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
|
|
14993
|
+
kind: "mutation",
|
|
14994
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14995
|
+
}), method(object({
|
|
14928
14996
|
addonId: string().optional(),
|
|
14929
14997
|
requestId: string()
|
|
14930
14998
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -14935,7 +15003,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
|
|
|
14935
15003
|
auth: "admin"
|
|
14936
15004
|
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
14937
15005
|
kind: "mutation",
|
|
14938
|
-
auth: "admin"
|
|
15006
|
+
auth: "admin",
|
|
15007
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14939
15008
|
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
14940
15009
|
selector: LlmDefaultSelectorSchema,
|
|
14941
15010
|
profileId: string().nullable()
|
|
@@ -34996,6 +35065,12 @@ Object.freeze({
|
|
|
34996
35065
|
addonId: null,
|
|
34997
35066
|
access: "view"
|
|
34998
35067
|
},
|
|
35068
|
+
"deviceManager.migrateDevice": {
|
|
35069
|
+
capName: "device-manager",
|
|
35070
|
+
capScope: "system",
|
|
35071
|
+
addonId: null,
|
|
35072
|
+
access: "create"
|
|
35073
|
+
},
|
|
34999
35074
|
"deviceManager.persistConfig": {
|
|
35000
35075
|
capName: "device-manager",
|
|
35001
35076
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -8702,7 +8702,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
8702
8702
|
"quota",
|
|
8703
8703
|
"manual",
|
|
8704
8704
|
"operator",
|
|
8705
|
-
"maintenance"
|
|
8705
|
+
"maintenance",
|
|
8706
|
+
"orphaned-device"
|
|
8706
8707
|
]);
|
|
8707
8708
|
/** One audit row, shared verbatim by both domains. */
|
|
8708
8709
|
var OpsLogEntrySchema = object({
|
|
@@ -13997,10 +13998,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
13997
13998
|
deviceId: number(),
|
|
13998
13999
|
data: record(string(), unknown())
|
|
13999
14000
|
});
|
|
14001
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
14002
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
14003
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
14004
|
+
"off",
|
|
14005
|
+
"on",
|
|
14006
|
+
"not-offered",
|
|
14007
|
+
"unreachable"
|
|
14008
|
+
]);
|
|
14009
|
+
var MigrateSwitchReportSchema = object({
|
|
14010
|
+
deviceId: number(),
|
|
14011
|
+
switchId: CameraSwitchIdSchema,
|
|
14012
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
14013
|
+
detail: string().optional()
|
|
14014
|
+
});
|
|
14015
|
+
var MigrateDeviceResultSchema = object({
|
|
14016
|
+
sourceId: number(),
|
|
14017
|
+
targetId: number(),
|
|
14018
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
14019
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
14020
|
+
* value meaning the replaced hardware is quiet. */
|
|
14021
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
14022
|
+
swapped: boolean()
|
|
14023
|
+
});
|
|
14000
14024
|
method(object({
|
|
14001
14025
|
addonId: string(),
|
|
14002
14026
|
stableId: string()
|
|
14003
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
14027
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
14028
|
+
sourceId: number(),
|
|
14029
|
+
targetId: number()
|
|
14030
|
+
}), MigrateDeviceResultSchema, {
|
|
14031
|
+
kind: "mutation",
|
|
14032
|
+
auth: "admin"
|
|
14033
|
+
}), 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({
|
|
14004
14034
|
deviceId: number(),
|
|
14005
14035
|
name: string()
|
|
14006
14036
|
}), _void(), {
|
|
@@ -14475,6 +14505,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
14475
14505
|
auth: "admin"
|
|
14476
14506
|
});
|
|
14477
14507
|
/**
|
|
14508
|
+
* Transport bounds for AI capability methods.
|
|
14509
|
+
*
|
|
14510
|
+
* Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
|
|
14511
|
+
* each other: declaring the constant in either one hands the other `undefined`
|
|
14512
|
+
* at module-init time, and an undefined `timeoutMs` silently falls back to the
|
|
14513
|
+
* kernel's 60 s default — the exact failure this constant exists to prevent,
|
|
14514
|
+
* reintroduced invisibly. Found by the guard, not by review.
|
|
14515
|
+
*/
|
|
14516
|
+
/**
|
|
14517
|
+
* Ceiling for a cap method that runs inference or loads a model.
|
|
14518
|
+
*
|
|
14519
|
+
* Deliberately far above anything the AI layer itself may wait for (a summary
|
|
14520
|
+
* asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
|
|
14521
|
+
* never be the layer that gives up first: when it does, the failure is
|
|
14522
|
+
* reported as a transport error for a model that was still thinking, naming
|
|
14523
|
+
* the wrong layer and hiding the real one.
|
|
14524
|
+
*
|
|
14525
|
+
* Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
|
|
14526
|
+
* more on a cold model load. With no declaration every digest failed at
|
|
14527
|
+
* exactly 60 s and shipped without its text.
|
|
14528
|
+
*
|
|
14529
|
+
* A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
|
|
14530
|
+
* the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
|
|
14531
|
+
* decide when to stop, because only they can say WHY.
|
|
14532
|
+
*/
|
|
14533
|
+
var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
|
|
14534
|
+
/** A multi-gigabyte download. An hour is not generous, it is honest. */
|
|
14535
|
+
var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
|
|
14536
|
+
/**
|
|
14478
14537
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
14479
14538
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
14480
14539
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -14746,16 +14805,19 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
14746
14805
|
timeoutMs: number().int().positive().optional()
|
|
14747
14806
|
}), LlmGenerateResultSchema, {
|
|
14748
14807
|
kind: "mutation",
|
|
14749
|
-
auth: "admin"
|
|
14808
|
+
auth: "admin",
|
|
14809
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14750
14810
|
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
14751
14811
|
kind: "mutation",
|
|
14752
|
-
auth: "admin"
|
|
14812
|
+
auth: "admin",
|
|
14813
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14753
14814
|
}), method(object({}), _void(), {
|
|
14754
14815
|
kind: "mutation",
|
|
14755
14816
|
auth: "admin"
|
|
14756
14817
|
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
14757
14818
|
kind: "mutation",
|
|
14758
|
-
auth: "admin"
|
|
14819
|
+
auth: "admin",
|
|
14820
|
+
timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
|
|
14759
14821
|
}), method(object({ file: string() }), _void(), {
|
|
14760
14822
|
kind: "mutation",
|
|
14761
14823
|
auth: "admin"
|
|
@@ -14923,7 +14985,13 @@ var ProfileRefInputSchema = object({
|
|
|
14923
14985
|
addonId: string(),
|
|
14924
14986
|
profileId: string()
|
|
14925
14987
|
});
|
|
14926
|
-
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14988
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
14989
|
+
kind: "mutation",
|
|
14990
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14991
|
+
}), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
|
|
14992
|
+
kind: "mutation",
|
|
14993
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14994
|
+
}), method(object({
|
|
14927
14995
|
addonId: string().optional(),
|
|
14928
14996
|
requestId: string()
|
|
14929
14997
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -14934,7 +15002,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
|
|
|
14934
15002
|
auth: "admin"
|
|
14935
15003
|
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
14936
15004
|
kind: "mutation",
|
|
14937
|
-
auth: "admin"
|
|
15005
|
+
auth: "admin",
|
|
15006
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
14938
15007
|
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
14939
15008
|
selector: LlmDefaultSelectorSchema,
|
|
14940
15009
|
profileId: string().nullable()
|
|
@@ -34995,6 +35064,12 @@ Object.freeze({
|
|
|
34995
35064
|
addonId: null,
|
|
34996
35065
|
access: "view"
|
|
34997
35066
|
},
|
|
35067
|
+
"deviceManager.migrateDevice": {
|
|
35068
|
+
capName: "device-manager",
|
|
35069
|
+
capScope: "system",
|
|
35070
|
+
addonId: null,
|
|
35071
|
+
access: "create"
|
|
35072
|
+
},
|
|
34998
35073
|
"deviceManager.persistConfig": {
|
|
34999
35074
|
capName: "device-manager",
|
|
35000
35075
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-rademacher",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.54",
|
|
4
4
|
"description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|