@camstack/addon-provider-dreame 0.2.121 → 0.2.123
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 +122 -76
- package/dist/addon.mjs +122 -76
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -63437,11 +63437,11 @@ var ModelVariantGroupSchema = object({
|
|
|
63437
63437
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
63438
63438
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
63439
63439
|
/**
|
|
63440
|
-
*
|
|
63441
|
-
*
|
|
63442
|
-
*
|
|
63440
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
63441
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
63442
|
+
* label is "Test".
|
|
63443
63443
|
*/
|
|
63444
|
-
optimization: _enum(["standard", "
|
|
63444
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
63445
63445
|
/**
|
|
63446
63446
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
63447
63447
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -63464,9 +63464,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
63464
63464
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
63465
63465
|
* string still parses — the string is lifted into `{ weights }`.
|
|
63466
63466
|
*
|
|
63467
|
-
* Every licence surface (the
|
|
63468
|
-
*
|
|
63469
|
-
*
|
|
63467
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
63468
|
+
* model table) is GENERATED from these records by
|
|
63469
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
63470
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
63470
63471
|
*/
|
|
63471
63472
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
63472
63473
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -67097,7 +67098,7 @@ DeviceType.Camera;
|
|
|
67097
67098
|
* This matters here more than anywhere else in the repo, because every provider
|
|
67098
67099
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
67099
67100
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
67100
|
-
* and `http://admin:hunter2@192.168.
|
|
67101
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
67101
67102
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
67102
67103
|
* filling it is the operator's business, not ours.
|
|
67103
67104
|
*
|
|
@@ -70286,7 +70287,7 @@ method(object({
|
|
|
70286
70287
|
timeoutMs: 6e5
|
|
70287
70288
|
});
|
|
70288
70289
|
method(object({
|
|
70289
|
-
|
|
70290
|
+
targetNodeId: string(),
|
|
70290
70291
|
modelId: string(),
|
|
70291
70292
|
format: _enum(MODEL_FORMATS),
|
|
70292
70293
|
entry: ModelCatalogEntrySchema
|
|
@@ -72790,8 +72791,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
72790
72791
|
disabledTargetIds: array(string()).default([])
|
|
72791
72792
|
});
|
|
72792
72793
|
/**
|
|
72793
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
72794
|
-
* still-true state. `
|
|
72794
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
72795
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
72796
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
72795
72797
|
* job is not an open state, and the alarm stays instant.
|
|
72796
72798
|
*/
|
|
72797
72799
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -72803,6 +72805,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
72803
72805
|
"detection-blind",
|
|
72804
72806
|
"nodes",
|
|
72805
72807
|
"addons",
|
|
72808
|
+
"addon-updates",
|
|
72806
72809
|
"updates"
|
|
72807
72810
|
]);
|
|
72808
72811
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -73283,7 +73286,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
73283
73286
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
73284
73287
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
73285
73288
|
*/
|
|
73286
|
-
schedule: NcScheduleSchema.optional()
|
|
73289
|
+
schedule: NcScheduleSchema.optional(),
|
|
73290
|
+
/**
|
|
73291
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
73292
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
73293
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
73294
|
+
*/
|
|
73295
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
73296
|
+
/**
|
|
73297
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
73298
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
73299
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
73300
|
+
*/
|
|
73301
|
+
notifySensorRewatched: boolean().optional()
|
|
73287
73302
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
73288
73303
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
73289
73304
|
mode: AlarmArmModeSchema,
|
|
@@ -73292,7 +73307,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
73292
73307
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
73293
73308
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
73294
73309
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
73295
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
73310
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
73311
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
73312
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
73313
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
73314
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
73296
73315
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
73297
73316
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
73298
73317
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -74253,39 +74272,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
74253
74272
|
label: "Face recognition model",
|
|
74254
74273
|
defaultModelId: "auraface-r100",
|
|
74255
74274
|
indexName: "the enrolled face gallery",
|
|
74256
|
-
options: [
|
|
74257
|
-
|
|
74258
|
-
|
|
74259
|
-
|
|
74260
|
-
},
|
|
74261
|
-
{
|
|
74262
|
-
id: "arcface-r100",
|
|
74263
|
-
label: "ArcFace (ResNet34)"
|
|
74264
|
-
},
|
|
74265
|
-
{
|
|
74266
|
-
id: "inception-resnet-v1",
|
|
74267
|
-
label: "Inception ResNet V1"
|
|
74268
|
-
}
|
|
74269
|
-
]
|
|
74275
|
+
options: [{
|
|
74276
|
+
id: "auraface-r100",
|
|
74277
|
+
label: "AuraFace R100"
|
|
74278
|
+
}]
|
|
74270
74279
|
}, {
|
|
74271
74280
|
stepId: "clip-embedding",
|
|
74272
74281
|
label: "Semantic search model",
|
|
74273
|
-
defaultModelId: "
|
|
74282
|
+
defaultModelId: "siglip2-b16-224",
|
|
74274
74283
|
indexName: "the object semantic-search index",
|
|
74275
|
-
options: [
|
|
74276
|
-
|
|
74277
|
-
|
|
74278
|
-
|
|
74279
|
-
},
|
|
74280
|
-
{
|
|
74281
|
-
id: "mobileclip-s2",
|
|
74282
|
-
label: "MobileCLIP S2"
|
|
74283
|
-
},
|
|
74284
|
-
{
|
|
74285
|
-
id: "siglip2-b16-224",
|
|
74286
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
74287
|
-
}
|
|
74288
|
-
]
|
|
74284
|
+
options: [{
|
|
74285
|
+
id: "siglip2-b16-224",
|
|
74286
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
74287
|
+
}]
|
|
74289
74288
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
74290
74289
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
74291
74290
|
stepId: "face-embedding",
|
|
@@ -77173,6 +77172,22 @@ var MotionSourceEnum = _enum([
|
|
|
77173
77172
|
"device-activity"
|
|
77174
77173
|
]);
|
|
77175
77174
|
/**
|
|
77175
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
77176
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
77177
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
77178
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
77179
|
+
* absent when unknown or when the camera itself triggered.
|
|
77180
|
+
*
|
|
77181
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
77182
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
77183
|
+
* runner never decides anything on it.
|
|
77184
|
+
*/
|
|
77185
|
+
var SessionTriggerSchema = object({
|
|
77186
|
+
source: MotionSourceEnum,
|
|
77187
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
77188
|
+
sensorName: string().optional()
|
|
77189
|
+
});
|
|
77190
|
+
/**
|
|
77176
77191
|
* List of motion sources active on a camera. Empty array is valid:
|
|
77177
77192
|
* "no source" — happens for battery cams without firmware motion when
|
|
77178
77193
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -77424,6 +77439,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
77424
77439
|
*/
|
|
77425
77440
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
77426
77441
|
/**
|
|
77442
|
+
* What opened this attach, on a SESSION attach only (see
|
|
77443
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
77444
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
77445
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
77446
|
+
* runner then names no source on the phase event.
|
|
77447
|
+
*/
|
|
77448
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
77449
|
+
/**
|
|
77427
77450
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
77428
77451
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
77429
77452
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -84837,7 +84860,7 @@ var LocalInterfaceSchema = object({
|
|
|
84837
84860
|
name: string(),
|
|
84838
84861
|
family: _enum(["IPv4", "IPv6"]),
|
|
84839
84862
|
address: string(),
|
|
84840
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
84863
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
84841
84864
|
cidr: string(),
|
|
84842
84865
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
84843
84866
|
netmask: string(),
|
|
@@ -84891,7 +84914,8 @@ var ConnectionEndpointSchema = object({
|
|
|
84891
84914
|
"lan-ipv4",
|
|
84892
84915
|
"lan-ipv6",
|
|
84893
84916
|
"public",
|
|
84894
|
-
"loopback"
|
|
84917
|
+
"loopback",
|
|
84918
|
+
"app-link"
|
|
84895
84919
|
]),
|
|
84896
84920
|
/**
|
|
84897
84921
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -84960,15 +84984,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
84960
84984
|
localPort: AdvertisedLocalPortSchema
|
|
84961
84985
|
});
|
|
84962
84986
|
/**
|
|
84963
|
-
* The
|
|
84964
|
-
*
|
|
84965
|
-
*
|
|
84987
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
84988
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
84989
|
+
* so the UI can show it either way.
|
|
84966
84990
|
*/
|
|
84967
84991
|
var NotificationEndpointSchema = object({
|
|
84968
84992
|
/** The operator's explicit choice, or null for AUTO. */
|
|
84969
84993
|
baseUrl: string().nullable(),
|
|
84970
|
-
/**
|
|
84971
|
-
|
|
84994
|
+
/**
|
|
84995
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
84996
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
84997
|
+
* answered the public tunnel / mesh here, or null.
|
|
84998
|
+
*/
|
|
84999
|
+
resolved: string().nullable(),
|
|
85000
|
+
/**
|
|
85001
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
85002
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
85003
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
85004
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
85005
|
+
* Absent on a pre-D709 hub.
|
|
85006
|
+
*/
|
|
85007
|
+
appLinkHub: string().nullable()
|
|
84972
85008
|
});
|
|
84973
85009
|
/**
|
|
84974
85010
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -85022,7 +85058,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
85022
85058
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
85023
85059
|
* to avoid mixed-content blocks in the browser. The public
|
|
85024
85060
|
* tunnel always emits `https://` regardless. */
|
|
85025
|
-
scheme: _enum(["http", "https"]).optional()
|
|
85061
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
85062
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
85063
|
+
* an address notification links can be flagged with, not a hub
|
|
85064
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
85065
|
+
includeAppLink: boolean().optional()
|
|
85026
85066
|
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
85027
85067
|
kind: "mutation",
|
|
85028
85068
|
auth: "admin"
|
|
@@ -85351,7 +85391,7 @@ var MeshPeerSchema = object({
|
|
|
85351
85391
|
tags: array(string()).readonly(),
|
|
85352
85392
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
85353
85393
|
exitNodeOption: boolean(),
|
|
85354
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
85394
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
85355
85395
|
advertisedRoutes: array(string()).readonly(),
|
|
85356
85396
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
85357
85397
|
userLogin: string().nullable(),
|
|
@@ -86827,7 +86867,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
86827
86867
|
*/
|
|
86828
86868
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
86829
86869
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
86830
|
-
readOnly: boolean().optional()
|
|
86870
|
+
readOnly: boolean().optional(),
|
|
86871
|
+
/**
|
|
86872
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
86873
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
86874
|
+
* copy on the binding.
|
|
86875
|
+
*/
|
|
86876
|
+
maxCharacters: number().int().positive().optional()
|
|
86831
86877
|
})).readonly() });
|
|
86832
86878
|
var OsdOverlayPatchSchema = object({
|
|
86833
86879
|
enabled: boolean().optional(),
|
|
@@ -86878,7 +86924,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
86878
86924
|
valuePath: string().min(1).max(64),
|
|
86879
86925
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
86880
86926
|
displayUnit: string().max(16).optional(),
|
|
86881
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
86927
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
86928
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
86929
|
+
valueMap: record(string(), string()).optional()
|
|
86882
86930
|
});
|
|
86883
86931
|
/**
|
|
86884
86932
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -86928,18 +86976,11 @@ var OsdSlotBindingSchema = object({
|
|
|
86928
86976
|
source: OsdSourceSchema,
|
|
86929
86977
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
86930
86978
|
template: string().max(96).default("${value}"),
|
|
86931
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
86932
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
86933
86979
|
/**
|
|
86934
86980
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
86935
86981
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
86936
86982
|
*/
|
|
86937
86983
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
86938
|
-
/**
|
|
86939
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
86940
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
86941
|
-
*/
|
|
86942
|
-
unitLabel: string().max(8).optional(),
|
|
86943
86984
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
86944
86985
|
valueMap: record(string(), string()).optional(),
|
|
86945
86986
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -86948,9 +86989,7 @@ var OsdSlotBindingSchema = object({
|
|
|
86948
86989
|
* Display gate, in the notification centre's condition vocabulary.
|
|
86949
86990
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
86950
86991
|
*/
|
|
86951
|
-
conditions: NcConditionsSchema.optional()
|
|
86952
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
86953
|
-
fallbackText: string().max(64).default("")
|
|
86992
|
+
conditions: NcConditionsSchema.optional()
|
|
86954
86993
|
});
|
|
86955
86994
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
86956
86995
|
var OsdSlotViewSchema = object({
|
|
@@ -105183,12 +105222,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
105183
105222
|
{
|
|
105184
105223
|
id: "addons",
|
|
105185
105224
|
family: "system",
|
|
105186
|
-
label: "Addons",
|
|
105187
|
-
kinds: [
|
|
105188
|
-
|
|
105189
|
-
|
|
105190
|
-
|
|
105191
|
-
|
|
105225
|
+
label: "Addons stopped",
|
|
105226
|
+
kinds: ["addon-crash-loop"]
|
|
105227
|
+
},
|
|
105228
|
+
{
|
|
105229
|
+
id: "addon-updates",
|
|
105230
|
+
family: "system",
|
|
105231
|
+
label: "Addon updates",
|
|
105232
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
105192
105233
|
},
|
|
105193
105234
|
{
|
|
105194
105235
|
id: "updates",
|
|
@@ -105348,13 +105389,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
105348
105389
|
},
|
|
105349
105390
|
{
|
|
105350
105391
|
name: "summaryAddons",
|
|
105351
|
-
label: "Summary: addons",
|
|
105352
|
-
example: "
|
|
105353
|
-
kinds: [
|
|
105354
|
-
|
|
105355
|
-
|
|
105356
|
-
|
|
105357
|
-
|
|
105392
|
+
label: "Summary: addons stopped",
|
|
105393
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
105394
|
+
kinds: ["addon-crash-loop"]
|
|
105395
|
+
},
|
|
105396
|
+
{
|
|
105397
|
+
name: "summaryAddonUpdates",
|
|
105398
|
+
label: "Summary: addon updates",
|
|
105399
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
105400
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
105358
105401
|
},
|
|
105359
105402
|
{
|
|
105360
105403
|
name: "summaryUpdates",
|
|
@@ -105438,6 +105481,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
105438
105481
|
[...RULE_BODY_ONLY],
|
|
105439
105482
|
[...RULE_TEXT],
|
|
105440
105483
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
105484
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
105441
105485
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
105442
105486
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
105443
105487
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -105478,6 +105522,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
105478
105522
|
[...RULE_TEXT],
|
|
105479
105523
|
[...RULE_TEXT],
|
|
105480
105524
|
[...RULE_TEXT],
|
|
105525
|
+
[...RULE_TEXT],
|
|
105526
|
+
[...RULE_TEXT],
|
|
105481
105527
|
...STATE_SUMMARY_VARS
|
|
105482
105528
|
];
|
|
105483
105529
|
new Set([
|
package/dist/addon.mjs
CHANGED
|
@@ -63434,11 +63434,11 @@ var ModelVariantGroupSchema = object({
|
|
|
63434
63434
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
63435
63435
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
63436
63436
|
/**
|
|
63437
|
-
*
|
|
63438
|
-
*
|
|
63439
|
-
*
|
|
63437
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
63438
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
63439
|
+
* label is "Test".
|
|
63440
63440
|
*/
|
|
63441
|
-
optimization: _enum(["standard", "
|
|
63441
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
63442
63442
|
/**
|
|
63443
63443
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
63444
63444
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -63461,9 +63461,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
63461
63461
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
63462
63462
|
* string still parses — the string is lifted into `{ weights }`.
|
|
63463
63463
|
*
|
|
63464
|
-
* Every licence surface (the
|
|
63465
|
-
*
|
|
63466
|
-
*
|
|
63464
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
63465
|
+
* model table) is GENERATED from these records by
|
|
63466
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
63467
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
63467
63468
|
*/
|
|
63468
63469
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
63469
63470
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -67094,7 +67095,7 @@ DeviceType.Camera;
|
|
|
67094
67095
|
* This matters here more than anywhere else in the repo, because every provider
|
|
67095
67096
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
67096
67097
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
67097
|
-
* and `http://admin:hunter2@192.168.
|
|
67098
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
67098
67099
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
67099
67100
|
* filling it is the operator's business, not ours.
|
|
67100
67101
|
*
|
|
@@ -70283,7 +70284,7 @@ method(object({
|
|
|
70283
70284
|
timeoutMs: 6e5
|
|
70284
70285
|
});
|
|
70285
70286
|
method(object({
|
|
70286
|
-
|
|
70287
|
+
targetNodeId: string(),
|
|
70287
70288
|
modelId: string(),
|
|
70288
70289
|
format: _enum(MODEL_FORMATS),
|
|
70289
70290
|
entry: ModelCatalogEntrySchema
|
|
@@ -72787,8 +72788,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
72787
72788
|
disabledTargetIds: array(string()).default([])
|
|
72788
72789
|
});
|
|
72789
72790
|
/**
|
|
72790
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
72791
|
-
* still-true state. `
|
|
72791
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
72792
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
72793
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
72792
72794
|
* job is not an open state, and the alarm stays instant.
|
|
72793
72795
|
*/
|
|
72794
72796
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -72800,6 +72802,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
72800
72802
|
"detection-blind",
|
|
72801
72803
|
"nodes",
|
|
72802
72804
|
"addons",
|
|
72805
|
+
"addon-updates",
|
|
72803
72806
|
"updates"
|
|
72804
72807
|
]);
|
|
72805
72808
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -73280,7 +73283,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
73280
73283
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
73281
73284
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
73282
73285
|
*/
|
|
73283
|
-
schedule: NcScheduleSchema.optional()
|
|
73286
|
+
schedule: NcScheduleSchema.optional(),
|
|
73287
|
+
/**
|
|
73288
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
73289
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
73290
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
73291
|
+
*/
|
|
73292
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
73293
|
+
/**
|
|
73294
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
73295
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
73296
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
73297
|
+
*/
|
|
73298
|
+
notifySensorRewatched: boolean().optional()
|
|
73284
73299
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
73285
73300
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
73286
73301
|
mode: AlarmArmModeSchema,
|
|
@@ -73289,7 +73304,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
73289
73304
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
73290
73305
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
73291
73306
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
73292
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
73307
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
73308
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
73309
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
73310
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
73311
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
73293
73312
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
73294
73313
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
73295
73314
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -74250,39 +74269,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
74250
74269
|
label: "Face recognition model",
|
|
74251
74270
|
defaultModelId: "auraface-r100",
|
|
74252
74271
|
indexName: "the enrolled face gallery",
|
|
74253
|
-
options: [
|
|
74254
|
-
|
|
74255
|
-
|
|
74256
|
-
|
|
74257
|
-
},
|
|
74258
|
-
{
|
|
74259
|
-
id: "arcface-r100",
|
|
74260
|
-
label: "ArcFace (ResNet34)"
|
|
74261
|
-
},
|
|
74262
|
-
{
|
|
74263
|
-
id: "inception-resnet-v1",
|
|
74264
|
-
label: "Inception ResNet V1"
|
|
74265
|
-
}
|
|
74266
|
-
]
|
|
74272
|
+
options: [{
|
|
74273
|
+
id: "auraface-r100",
|
|
74274
|
+
label: "AuraFace R100"
|
|
74275
|
+
}]
|
|
74267
74276
|
}, {
|
|
74268
74277
|
stepId: "clip-embedding",
|
|
74269
74278
|
label: "Semantic search model",
|
|
74270
|
-
defaultModelId: "
|
|
74279
|
+
defaultModelId: "siglip2-b16-224",
|
|
74271
74280
|
indexName: "the object semantic-search index",
|
|
74272
|
-
options: [
|
|
74273
|
-
|
|
74274
|
-
|
|
74275
|
-
|
|
74276
|
-
},
|
|
74277
|
-
{
|
|
74278
|
-
id: "mobileclip-s2",
|
|
74279
|
-
label: "MobileCLIP S2"
|
|
74280
|
-
},
|
|
74281
|
-
{
|
|
74282
|
-
id: "siglip2-b16-224",
|
|
74283
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
74284
|
-
}
|
|
74285
|
-
]
|
|
74281
|
+
options: [{
|
|
74282
|
+
id: "siglip2-b16-224",
|
|
74283
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
74284
|
+
}]
|
|
74286
74285
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
74287
74286
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
74288
74287
|
stepId: "face-embedding",
|
|
@@ -77170,6 +77169,22 @@ var MotionSourceEnum = _enum([
|
|
|
77170
77169
|
"device-activity"
|
|
77171
77170
|
]);
|
|
77172
77171
|
/**
|
|
77172
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
77173
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
77174
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
77175
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
77176
|
+
* absent when unknown or when the camera itself triggered.
|
|
77177
|
+
*
|
|
77178
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
77179
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
77180
|
+
* runner never decides anything on it.
|
|
77181
|
+
*/
|
|
77182
|
+
var SessionTriggerSchema = object({
|
|
77183
|
+
source: MotionSourceEnum,
|
|
77184
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
77185
|
+
sensorName: string().optional()
|
|
77186
|
+
});
|
|
77187
|
+
/**
|
|
77173
77188
|
* List of motion sources active on a camera. Empty array is valid:
|
|
77174
77189
|
* "no source" — happens for battery cams without firmware motion when
|
|
77175
77190
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -77421,6 +77436,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
77421
77436
|
*/
|
|
77422
77437
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
77423
77438
|
/**
|
|
77439
|
+
* What opened this attach, on a SESSION attach only (see
|
|
77440
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
77441
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
77442
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
77443
|
+
* runner then names no source on the phase event.
|
|
77444
|
+
*/
|
|
77445
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
77446
|
+
/**
|
|
77424
77447
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
77425
77448
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
77426
77449
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -84834,7 +84857,7 @@ var LocalInterfaceSchema = object({
|
|
|
84834
84857
|
name: string(),
|
|
84835
84858
|
family: _enum(["IPv4", "IPv6"]),
|
|
84836
84859
|
address: string(),
|
|
84837
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
84860
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
84838
84861
|
cidr: string(),
|
|
84839
84862
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
84840
84863
|
netmask: string(),
|
|
@@ -84888,7 +84911,8 @@ var ConnectionEndpointSchema = object({
|
|
|
84888
84911
|
"lan-ipv4",
|
|
84889
84912
|
"lan-ipv6",
|
|
84890
84913
|
"public",
|
|
84891
|
-
"loopback"
|
|
84914
|
+
"loopback",
|
|
84915
|
+
"app-link"
|
|
84892
84916
|
]),
|
|
84893
84917
|
/**
|
|
84894
84918
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -84957,15 +84981,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
84957
84981
|
localPort: AdvertisedLocalPortSchema
|
|
84958
84982
|
});
|
|
84959
84983
|
/**
|
|
84960
|
-
* The
|
|
84961
|
-
*
|
|
84962
|
-
*
|
|
84984
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
84985
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
84986
|
+
* so the UI can show it either way.
|
|
84963
84987
|
*/
|
|
84964
84988
|
var NotificationEndpointSchema = object({
|
|
84965
84989
|
/** The operator's explicit choice, or null for AUTO. */
|
|
84966
84990
|
baseUrl: string().nullable(),
|
|
84967
|
-
/**
|
|
84968
|
-
|
|
84991
|
+
/**
|
|
84992
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
84993
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
84994
|
+
* answered the public tunnel / mesh here, or null.
|
|
84995
|
+
*/
|
|
84996
|
+
resolved: string().nullable(),
|
|
84997
|
+
/**
|
|
84998
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
84999
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
85000
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
85001
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
85002
|
+
* Absent on a pre-D709 hub.
|
|
85003
|
+
*/
|
|
85004
|
+
appLinkHub: string().nullable()
|
|
84969
85005
|
});
|
|
84970
85006
|
/**
|
|
84971
85007
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -85019,7 +85055,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
85019
85055
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
85020
85056
|
* to avoid mixed-content blocks in the browser. The public
|
|
85021
85057
|
* tunnel always emits `https://` regardless. */
|
|
85022
|
-
scheme: _enum(["http", "https"]).optional()
|
|
85058
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
85059
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
85060
|
+
* an address notification links can be flagged with, not a hub
|
|
85061
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
85062
|
+
includeAppLink: boolean().optional()
|
|
85023
85063
|
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
85024
85064
|
kind: "mutation",
|
|
85025
85065
|
auth: "admin"
|
|
@@ -85348,7 +85388,7 @@ var MeshPeerSchema = object({
|
|
|
85348
85388
|
tags: array(string()).readonly(),
|
|
85349
85389
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
85350
85390
|
exitNodeOption: boolean(),
|
|
85351
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
85391
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
85352
85392
|
advertisedRoutes: array(string()).readonly(),
|
|
85353
85393
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
85354
85394
|
userLogin: string().nullable(),
|
|
@@ -86824,7 +86864,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
86824
86864
|
*/
|
|
86825
86865
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
86826
86866
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
86827
|
-
readOnly: boolean().optional()
|
|
86867
|
+
readOnly: boolean().optional(),
|
|
86868
|
+
/**
|
|
86869
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
86870
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
86871
|
+
* copy on the binding.
|
|
86872
|
+
*/
|
|
86873
|
+
maxCharacters: number().int().positive().optional()
|
|
86828
86874
|
})).readonly() });
|
|
86829
86875
|
var OsdOverlayPatchSchema = object({
|
|
86830
86876
|
enabled: boolean().optional(),
|
|
@@ -86875,7 +86921,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
86875
86921
|
valuePath: string().min(1).max(64),
|
|
86876
86922
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
86877
86923
|
displayUnit: string().max(16).optional(),
|
|
86878
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
86924
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
86925
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
86926
|
+
valueMap: record(string(), string()).optional()
|
|
86879
86927
|
});
|
|
86880
86928
|
/**
|
|
86881
86929
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -86925,18 +86973,11 @@ var OsdSlotBindingSchema = object({
|
|
|
86925
86973
|
source: OsdSourceSchema,
|
|
86926
86974
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
86927
86975
|
template: string().max(96).default("${value}"),
|
|
86928
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
86929
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
86930
86976
|
/**
|
|
86931
86977
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
86932
86978
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
86933
86979
|
*/
|
|
86934
86980
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
86935
|
-
/**
|
|
86936
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
86937
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
86938
|
-
*/
|
|
86939
|
-
unitLabel: string().max(8).optional(),
|
|
86940
86981
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
86941
86982
|
valueMap: record(string(), string()).optional(),
|
|
86942
86983
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -86945,9 +86986,7 @@ var OsdSlotBindingSchema = object({
|
|
|
86945
86986
|
* Display gate, in the notification centre's condition vocabulary.
|
|
86946
86987
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
86947
86988
|
*/
|
|
86948
|
-
conditions: NcConditionsSchema.optional()
|
|
86949
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
86950
|
-
fallbackText: string().max(64).default("")
|
|
86989
|
+
conditions: NcConditionsSchema.optional()
|
|
86951
86990
|
});
|
|
86952
86991
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
86953
86992
|
var OsdSlotViewSchema = object({
|
|
@@ -105180,12 +105219,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
105180
105219
|
{
|
|
105181
105220
|
id: "addons",
|
|
105182
105221
|
family: "system",
|
|
105183
|
-
label: "Addons",
|
|
105184
|
-
kinds: [
|
|
105185
|
-
|
|
105186
|
-
|
|
105187
|
-
|
|
105188
|
-
|
|
105222
|
+
label: "Addons stopped",
|
|
105223
|
+
kinds: ["addon-crash-loop"]
|
|
105224
|
+
},
|
|
105225
|
+
{
|
|
105226
|
+
id: "addon-updates",
|
|
105227
|
+
family: "system",
|
|
105228
|
+
label: "Addon updates",
|
|
105229
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
105189
105230
|
},
|
|
105190
105231
|
{
|
|
105191
105232
|
id: "updates",
|
|
@@ -105345,13 +105386,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
105345
105386
|
},
|
|
105346
105387
|
{
|
|
105347
105388
|
name: "summaryAddons",
|
|
105348
|
-
label: "Summary: addons",
|
|
105349
|
-
example: "
|
|
105350
|
-
kinds: [
|
|
105351
|
-
|
|
105352
|
-
|
|
105353
|
-
|
|
105354
|
-
|
|
105389
|
+
label: "Summary: addons stopped",
|
|
105390
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
105391
|
+
kinds: ["addon-crash-loop"]
|
|
105392
|
+
},
|
|
105393
|
+
{
|
|
105394
|
+
name: "summaryAddonUpdates",
|
|
105395
|
+
label: "Summary: addon updates",
|
|
105396
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
105397
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
105355
105398
|
},
|
|
105356
105399
|
{
|
|
105357
105400
|
name: "summaryUpdates",
|
|
@@ -105435,6 +105478,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
105435
105478
|
[...RULE_BODY_ONLY],
|
|
105436
105479
|
[...RULE_TEXT],
|
|
105437
105480
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
105481
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
105438
105482
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
105439
105483
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
105440
105484
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -105475,6 +105519,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
105475
105519
|
[...RULE_TEXT],
|
|
105476
105520
|
[...RULE_TEXT],
|
|
105477
105521
|
[...RULE_TEXT],
|
|
105522
|
+
[...RULE_TEXT],
|
|
105523
|
+
[...RULE_TEXT],
|
|
105478
105524
|
...STATE_SUMMARY_VARS
|
|
105479
105525
|
];
|
|
105480
105526
|
new Set([
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-dreame",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.123",
|
|
4
4
|
"description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|