@camstack/addon-export-alexa 1.2.128 → 1.2.129
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/export-alexa.addon.js +122 -76
- package/dist/export-alexa.addon.mjs +122 -76
- package/package.json +1 -1
|
@@ -10836,11 +10836,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10836
10836
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10837
10837
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10838
10838
|
/**
|
|
10839
|
-
*
|
|
10840
|
-
*
|
|
10841
|
-
*
|
|
10839
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10840
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10841
|
+
* label is "Test".
|
|
10842
10842
|
*/
|
|
10843
|
-
optimization: _enum(["standard", "
|
|
10843
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10844
10844
|
/**
|
|
10845
10845
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10846
10846
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10863,9 +10863,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10863
10863
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10864
10864
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10865
10865
|
*
|
|
10866
|
-
* Every licence surface (the
|
|
10867
|
-
*
|
|
10868
|
-
*
|
|
10866
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10867
|
+
* model table) is GENERATED from these records by
|
|
10868
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10869
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10869
10870
|
*/
|
|
10870
10871
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10871
10872
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -14420,7 +14421,7 @@ DeviceType.Camera;
|
|
|
14420
14421
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14421
14422
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14422
14423
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14423
|
-
* and `http://admin:hunter2@192.168.
|
|
14424
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14424
14425
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14425
14426
|
* filling it is the operator's business, not ours.
|
|
14426
14427
|
*
|
|
@@ -17429,7 +17430,7 @@ method(object({
|
|
|
17429
17430
|
timeoutMs: 6e5
|
|
17430
17431
|
});
|
|
17431
17432
|
method(object({
|
|
17432
|
-
|
|
17433
|
+
targetNodeId: string(),
|
|
17433
17434
|
modelId: string(),
|
|
17434
17435
|
format: _enum(MODEL_FORMATS),
|
|
17435
17436
|
entry: ModelCatalogEntrySchema
|
|
@@ -19895,8 +19896,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19895
19896
|
disabledTargetIds: array(string()).default([])
|
|
19896
19897
|
});
|
|
19897
19898
|
/**
|
|
19898
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19899
|
-
* still-true state. `
|
|
19899
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19900
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19901
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19900
19902
|
* job is not an open state, and the alarm stays instant.
|
|
19901
19903
|
*/
|
|
19902
19904
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19908,6 +19910,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19908
19910
|
"detection-blind",
|
|
19909
19911
|
"nodes",
|
|
19910
19912
|
"addons",
|
|
19913
|
+
"addon-updates",
|
|
19911
19914
|
"updates"
|
|
19912
19915
|
]);
|
|
19913
19916
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20388,7 +20391,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20388
20391
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20389
20392
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20390
20393
|
*/
|
|
20391
|
-
schedule: NcScheduleSchema.optional()
|
|
20394
|
+
schedule: NcScheduleSchema.optional(),
|
|
20395
|
+
/**
|
|
20396
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20397
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20398
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20399
|
+
*/
|
|
20400
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20401
|
+
/**
|
|
20402
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20403
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20404
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20405
|
+
*/
|
|
20406
|
+
notifySensorRewatched: boolean().optional()
|
|
20392
20407
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20393
20408
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20394
20409
|
mode: AlarmArmModeSchema,
|
|
@@ -20397,7 +20412,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20397
20412
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20398
20413
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20399
20414
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20400
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20415
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20416
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20417
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20418
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20419
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20401
20420
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20402
20421
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20403
20422
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21374,39 +21393,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21374
21393
|
label: "Face recognition model",
|
|
21375
21394
|
defaultModelId: "auraface-r100",
|
|
21376
21395
|
indexName: "the enrolled face gallery",
|
|
21377
|
-
options: [
|
|
21378
|
-
|
|
21379
|
-
|
|
21380
|
-
|
|
21381
|
-
},
|
|
21382
|
-
{
|
|
21383
|
-
id: "arcface-r100",
|
|
21384
|
-
label: "ArcFace (ResNet34)"
|
|
21385
|
-
},
|
|
21386
|
-
{
|
|
21387
|
-
id: "inception-resnet-v1",
|
|
21388
|
-
label: "Inception ResNet V1"
|
|
21389
|
-
}
|
|
21390
|
-
]
|
|
21396
|
+
options: [{
|
|
21397
|
+
id: "auraface-r100",
|
|
21398
|
+
label: "AuraFace R100"
|
|
21399
|
+
}]
|
|
21391
21400
|
}, {
|
|
21392
21401
|
stepId: "clip-embedding",
|
|
21393
21402
|
label: "Semantic search model",
|
|
21394
|
-
defaultModelId: "
|
|
21403
|
+
defaultModelId: "siglip2-b16-224",
|
|
21395
21404
|
indexName: "the object semantic-search index",
|
|
21396
|
-
options: [
|
|
21397
|
-
|
|
21398
|
-
|
|
21399
|
-
|
|
21400
|
-
},
|
|
21401
|
-
{
|
|
21402
|
-
id: "mobileclip-s2",
|
|
21403
|
-
label: "MobileCLIP S2"
|
|
21404
|
-
},
|
|
21405
|
-
{
|
|
21406
|
-
id: "siglip2-b16-224",
|
|
21407
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21408
|
-
}
|
|
21409
|
-
]
|
|
21405
|
+
options: [{
|
|
21406
|
+
id: "siglip2-b16-224",
|
|
21407
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21408
|
+
}]
|
|
21410
21409
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21411
21410
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21412
21411
|
stepId: "face-embedding",
|
|
@@ -24254,6 +24253,22 @@ var MotionSourceEnum = _enum([
|
|
|
24254
24253
|
"device-activity"
|
|
24255
24254
|
]);
|
|
24256
24255
|
/**
|
|
24256
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24257
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24258
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24259
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24260
|
+
* absent when unknown or when the camera itself triggered.
|
|
24261
|
+
*
|
|
24262
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24263
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24264
|
+
* runner never decides anything on it.
|
|
24265
|
+
*/
|
|
24266
|
+
var SessionTriggerSchema = object({
|
|
24267
|
+
source: MotionSourceEnum,
|
|
24268
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24269
|
+
sensorName: string().optional()
|
|
24270
|
+
});
|
|
24271
|
+
/**
|
|
24257
24272
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24258
24273
|
* "no source" — happens for battery cams without firmware motion when
|
|
24259
24274
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24505,6 +24520,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24505
24520
|
*/
|
|
24506
24521
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24507
24522
|
/**
|
|
24523
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24524
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24525
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24526
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24527
|
+
* runner then names no source on the phase event.
|
|
24528
|
+
*/
|
|
24529
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24530
|
+
/**
|
|
24508
24531
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24509
24532
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24510
24533
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30728,7 +30751,7 @@ var LocalInterfaceSchema = object({
|
|
|
30728
30751
|
name: string(),
|
|
30729
30752
|
family: _enum(["IPv4", "IPv6"]),
|
|
30730
30753
|
address: string(),
|
|
30731
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30754
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30732
30755
|
cidr: string(),
|
|
30733
30756
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30734
30757
|
netmask: string(),
|
|
@@ -30782,7 +30805,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30782
30805
|
"lan-ipv4",
|
|
30783
30806
|
"lan-ipv6",
|
|
30784
30807
|
"public",
|
|
30785
|
-
"loopback"
|
|
30808
|
+
"loopback",
|
|
30809
|
+
"app-link"
|
|
30786
30810
|
]),
|
|
30787
30811
|
/**
|
|
30788
30812
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30851,15 +30875,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30851
30875
|
localPort: AdvertisedLocalPortSchema
|
|
30852
30876
|
});
|
|
30853
30877
|
/**
|
|
30854
|
-
* The
|
|
30855
|
-
*
|
|
30856
|
-
*
|
|
30878
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30879
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30880
|
+
* so the UI can show it either way.
|
|
30857
30881
|
*/
|
|
30858
30882
|
var NotificationEndpointSchema = object({
|
|
30859
30883
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30860
30884
|
baseUrl: string().nullable(),
|
|
30861
|
-
/**
|
|
30862
|
-
|
|
30885
|
+
/**
|
|
30886
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30887
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30888
|
+
* answered the public tunnel / mesh here, or null.
|
|
30889
|
+
*/
|
|
30890
|
+
resolved: string().nullable(),
|
|
30891
|
+
/**
|
|
30892
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30893
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30894
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30895
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30896
|
+
* Absent on a pre-D709 hub.
|
|
30897
|
+
*/
|
|
30898
|
+
appLinkHub: string().nullable()
|
|
30863
30899
|
});
|
|
30864
30900
|
/**
|
|
30865
30901
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30913,7 +30949,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30913
30949
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30914
30950
|
* to avoid mixed-content blocks in the browser. The public
|
|
30915
30951
|
* tunnel always emits `https://` regardless. */
|
|
30916
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30952
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30953
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30954
|
+
* an address notification links can be flagged with, not a hub
|
|
30955
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30956
|
+
includeAppLink: boolean().optional()
|
|
30917
30957
|
}), 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, {
|
|
30918
30958
|
kind: "mutation",
|
|
30919
30959
|
auth: "admin"
|
|
@@ -31174,7 +31214,7 @@ var MeshPeerSchema = object({
|
|
|
31174
31214
|
tags: array(string()).readonly(),
|
|
31175
31215
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
31176
31216
|
exitNodeOption: boolean(),
|
|
31177
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31217
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
31178
31218
|
advertisedRoutes: array(string()).readonly(),
|
|
31179
31219
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
31180
31220
|
userLogin: string().nullable(),
|
|
@@ -32118,7 +32158,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
32118
32158
|
*/
|
|
32119
32159
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
32120
32160
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
32121
|
-
readOnly: boolean().optional()
|
|
32161
|
+
readOnly: boolean().optional(),
|
|
32162
|
+
/**
|
|
32163
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
32164
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
32165
|
+
* copy on the binding.
|
|
32166
|
+
*/
|
|
32167
|
+
maxCharacters: number().int().positive().optional()
|
|
32122
32168
|
})).readonly() });
|
|
32123
32169
|
var OsdOverlayPatchSchema = object({
|
|
32124
32170
|
enabled: boolean().optional(),
|
|
@@ -32169,7 +32215,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
32169
32215
|
valuePath: string().min(1).max(64),
|
|
32170
32216
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
32171
32217
|
displayUnit: string().max(16).optional(),
|
|
32172
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
32218
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32219
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
32220
|
+
valueMap: record(string(), string()).optional()
|
|
32173
32221
|
});
|
|
32174
32222
|
/**
|
|
32175
32223
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32219,18 +32267,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32219
32267
|
source: OsdSourceSchema,
|
|
32220
32268
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32221
32269
|
template: string().max(96).default("${value}"),
|
|
32222
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32223
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32224
32270
|
/**
|
|
32225
32271
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32226
32272
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32227
32273
|
*/
|
|
32228
32274
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32229
|
-
/**
|
|
32230
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32231
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32232
|
-
*/
|
|
32233
|
-
unitLabel: string().max(8).optional(),
|
|
32234
32275
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32235
32276
|
valueMap: record(string(), string()).optional(),
|
|
32236
32277
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32239,9 +32280,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32239
32280
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32240
32281
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32241
32282
|
*/
|
|
32242
|
-
conditions: NcConditionsSchema.optional()
|
|
32243
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32244
|
-
fallbackText: string().max(64).default("")
|
|
32283
|
+
conditions: NcConditionsSchema.optional()
|
|
32245
32284
|
});
|
|
32246
32285
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32247
32286
|
var OsdSlotViewSchema = object({
|
|
@@ -47918,12 +47957,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47918
47957
|
{
|
|
47919
47958
|
id: "addons",
|
|
47920
47959
|
family: "system",
|
|
47921
|
-
label: "Addons",
|
|
47922
|
-
kinds: [
|
|
47923
|
-
|
|
47924
|
-
|
|
47925
|
-
|
|
47926
|
-
|
|
47960
|
+
label: "Addons stopped",
|
|
47961
|
+
kinds: ["addon-crash-loop"]
|
|
47962
|
+
},
|
|
47963
|
+
{
|
|
47964
|
+
id: "addon-updates",
|
|
47965
|
+
family: "system",
|
|
47966
|
+
label: "Addon updates",
|
|
47967
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47927
47968
|
},
|
|
47928
47969
|
{
|
|
47929
47970
|
id: "updates",
|
|
@@ -48083,13 +48124,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48083
48124
|
},
|
|
48084
48125
|
{
|
|
48085
48126
|
name: "summaryAddons",
|
|
48086
|
-
label: "Summary: addons",
|
|
48087
|
-
example: "
|
|
48088
|
-
kinds: [
|
|
48089
|
-
|
|
48090
|
-
|
|
48091
|
-
|
|
48092
|
-
|
|
48127
|
+
label: "Summary: addons stopped",
|
|
48128
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
48129
|
+
kinds: ["addon-crash-loop"]
|
|
48130
|
+
},
|
|
48131
|
+
{
|
|
48132
|
+
name: "summaryAddonUpdates",
|
|
48133
|
+
label: "Summary: addon updates",
|
|
48134
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
48135
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48093
48136
|
},
|
|
48094
48137
|
{
|
|
48095
48138
|
name: "summaryUpdates",
|
|
@@ -48173,6 +48216,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48173
48216
|
[...RULE_BODY_ONLY],
|
|
48174
48217
|
[...RULE_TEXT],
|
|
48175
48218
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48219
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
48176
48220
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48177
48221
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
48178
48222
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -48213,6 +48257,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
48213
48257
|
[...RULE_TEXT],
|
|
48214
48258
|
[...RULE_TEXT],
|
|
48215
48259
|
[...RULE_TEXT],
|
|
48260
|
+
[...RULE_TEXT],
|
|
48261
|
+
[...RULE_TEXT],
|
|
48216
48262
|
...STATE_SUMMARY_VARS
|
|
48217
48263
|
];
|
|
48218
48264
|
new Set([
|
|
@@ -10809,11 +10809,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10809
10809
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10810
10810
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10811
10811
|
/**
|
|
10812
|
-
*
|
|
10813
|
-
*
|
|
10814
|
-
*
|
|
10812
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10813
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10814
|
+
* label is "Test".
|
|
10815
10815
|
*/
|
|
10816
|
-
optimization: _enum(["standard", "
|
|
10816
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10817
10817
|
/**
|
|
10818
10818
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10819
10819
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10836,9 +10836,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10836
10836
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10837
10837
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10838
10838
|
*
|
|
10839
|
-
* Every licence surface (the
|
|
10840
|
-
*
|
|
10841
|
-
*
|
|
10839
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10840
|
+
* model table) is GENERATED from these records by
|
|
10841
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10842
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10842
10843
|
*/
|
|
10843
10844
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10844
10845
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -14393,7 +14394,7 @@ DeviceType.Camera;
|
|
|
14393
14394
|
* This matters here more than anywhere else in the repo, because every provider
|
|
14394
14395
|
* that knows a device's host knows its PASSWORD too: `{ host, port, username,
|
|
14395
14396
|
* password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
|
|
14396
|
-
* and `http://admin:hunter2@192.168.
|
|
14397
|
+
* and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
|
|
14397
14398
|
* camera's own page will ask for its own login. That is correct, and pre-
|
|
14398
14399
|
* filling it is the operator's business, not ours.
|
|
14399
14400
|
*
|
|
@@ -17402,7 +17403,7 @@ method(object({
|
|
|
17402
17403
|
timeoutMs: 6e5
|
|
17403
17404
|
});
|
|
17404
17405
|
method(object({
|
|
17405
|
-
|
|
17406
|
+
targetNodeId: string(),
|
|
17406
17407
|
modelId: string(),
|
|
17407
17408
|
format: _enum(MODEL_FORMATS),
|
|
17408
17409
|
entry: ModelCatalogEntrySchema
|
|
@@ -19868,8 +19869,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19868
19869
|
disabledTargetIds: array(string()).default([])
|
|
19869
19870
|
});
|
|
19870
19871
|
/**
|
|
19871
|
-
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that
|
|
19872
|
-
* still-true state. `
|
|
19872
|
+
* The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
|
|
19873
|
+
* report a still-true state. `addons` is the crash-looped addons only and
|
|
19874
|
+
* `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
|
|
19873
19875
|
* job is not an open state, and the alarm stays instant.
|
|
19874
19876
|
*/
|
|
19875
19877
|
var NcStateSummarySectionIdSchema = _enum([
|
|
@@ -19881,6 +19883,7 @@ var NcStateSummarySectionIdSchema = _enum([
|
|
|
19881
19883
|
"detection-blind",
|
|
19882
19884
|
"nodes",
|
|
19883
19885
|
"addons",
|
|
19886
|
+
"addon-updates",
|
|
19884
19887
|
"updates"
|
|
19885
19888
|
]);
|
|
19886
19889
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
@@ -20361,7 +20364,19 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20361
20364
|
* When this mode may be armed. Absent / null = always allowed (same as a
|
|
20362
20365
|
* rule with no `schedule`). Evaluated with {@link isScheduleActive}.
|
|
20363
20366
|
*/
|
|
20364
|
-
schedule: NcScheduleSchema.optional()
|
|
20367
|
+
schedule: NcScheduleSchema.optional(),
|
|
20368
|
+
/**
|
|
20369
|
+
* D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
|
|
20370
|
+
* intrusion naming the locations)? Absent = false — the entry-delay notification is the
|
|
20371
|
+
* only one, and the matches ride the triggered notification's mosaic (D705).
|
|
20372
|
+
*/
|
|
20373
|
+
notifyDuringEntryDelay: boolean().optional(),
|
|
20374
|
+
/**
|
|
20375
|
+
* D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
|
|
20376
|
+
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20377
|
+
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20378
|
+
*/
|
|
20379
|
+
notifySensorRewatched: boolean().optional()
|
|
20365
20380
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20366
20381
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20367
20382
|
mode: AlarmArmModeSchema,
|
|
@@ -20370,7 +20385,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20370
20385
|
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
|
|
20371
20386
|
postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
|
|
20372
20387
|
/** Set a schedule, or `null` to clear (mode always allowed again). */
|
|
20373
|
-
schedule: NcScheduleSchema.nullable().optional()
|
|
20388
|
+
schedule: NcScheduleSchema.nullable().optional(),
|
|
20389
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20390
|
+
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20391
|
+
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20392
|
+
notifySensorRewatched: boolean().nullable().optional()
|
|
20374
20393
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20375
20394
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20376
20395
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -21347,39 +21366,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21347
21366
|
label: "Face recognition model",
|
|
21348
21367
|
defaultModelId: "auraface-r100",
|
|
21349
21368
|
indexName: "the enrolled face gallery",
|
|
21350
|
-
options: [
|
|
21351
|
-
|
|
21352
|
-
|
|
21353
|
-
|
|
21354
|
-
},
|
|
21355
|
-
{
|
|
21356
|
-
id: "arcface-r100",
|
|
21357
|
-
label: "ArcFace (ResNet34)"
|
|
21358
|
-
},
|
|
21359
|
-
{
|
|
21360
|
-
id: "inception-resnet-v1",
|
|
21361
|
-
label: "Inception ResNet V1"
|
|
21362
|
-
}
|
|
21363
|
-
]
|
|
21369
|
+
options: [{
|
|
21370
|
+
id: "auraface-r100",
|
|
21371
|
+
label: "AuraFace R100"
|
|
21372
|
+
}]
|
|
21364
21373
|
}, {
|
|
21365
21374
|
stepId: "clip-embedding",
|
|
21366
21375
|
label: "Semantic search model",
|
|
21367
|
-
defaultModelId: "
|
|
21376
|
+
defaultModelId: "siglip2-b16-224",
|
|
21368
21377
|
indexName: "the object semantic-search index",
|
|
21369
|
-
options: [
|
|
21370
|
-
|
|
21371
|
-
|
|
21372
|
-
|
|
21373
|
-
},
|
|
21374
|
-
{
|
|
21375
|
-
id: "mobileclip-s2",
|
|
21376
|
-
label: "MobileCLIP S2"
|
|
21377
|
-
},
|
|
21378
|
-
{
|
|
21379
|
-
id: "siglip2-b16-224",
|
|
21380
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21381
|
-
}
|
|
21382
|
-
]
|
|
21378
|
+
options: [{
|
|
21379
|
+
id: "siglip2-b16-224",
|
|
21380
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21381
|
+
}]
|
|
21383
21382
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21384
21383
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21385
21384
|
stepId: "face-embedding",
|
|
@@ -24227,6 +24226,22 @@ var MotionSourceEnum = _enum([
|
|
|
24227
24226
|
"device-activity"
|
|
24228
24227
|
]);
|
|
24229
24228
|
/**
|
|
24229
|
+
* What opened an on-motion detection SESSION: the motion source that passed the
|
|
24230
|
+
* camera's `motionSources` gate, and what raised it (the camera itself, or a
|
|
24231
|
+
* sensor the operator attached — D672). `sensorName` is the attached sensor's
|
|
24232
|
+
* device name as the orchestrator's camera-sensors resolution last read it;
|
|
24233
|
+
* absent when unknown or when the camera itself triggered.
|
|
24234
|
+
*
|
|
24235
|
+
* Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
|
|
24236
|
+
* can say what started the session (D672 rule 11, amended 2026-10-06). The
|
|
24237
|
+
* runner never decides anything on it.
|
|
24238
|
+
*/
|
|
24239
|
+
var SessionTriggerSchema = object({
|
|
24240
|
+
source: MotionSourceEnum,
|
|
24241
|
+
triggeredBy: MotionTriggeredBySchema,
|
|
24242
|
+
sensorName: string().optional()
|
|
24243
|
+
});
|
|
24244
|
+
/**
|
|
24230
24245
|
* List of motion sources active on a camera. Empty array is valid:
|
|
24231
24246
|
* "no source" — happens for battery cams without firmware motion when
|
|
24232
24247
|
* the operator hasn't opted into the SW analyzer (would hold the
|
|
@@ -24478,6 +24493,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
24478
24493
|
*/
|
|
24479
24494
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
24480
24495
|
/**
|
|
24496
|
+
* What opened this attach, on a SESSION attach only (see
|
|
24497
|
+
* {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
|
|
24498
|
+
* standing attach, an occupancy burst, a re-dispatch with no motion event
|
|
24499
|
+
* behind it, and every attach from an orchestrator older than the field — the
|
|
24500
|
+
* runner then names no source on the phase event.
|
|
24501
|
+
*/
|
|
24502
|
+
sessionTrigger: SessionTriggerSchema.optional(),
|
|
24503
|
+
/**
|
|
24481
24504
|
* WHICH root detector runs for this camera. The detection counterpart of
|
|
24482
24505
|
* {@link motionSources}, same shape and same discipline: a per-camera list
|
|
24483
24506
|
* of sources the system understands, vendor-agnostic, owned here.
|
|
@@ -30701,7 +30724,7 @@ var LocalInterfaceSchema = object({
|
|
|
30701
30724
|
name: string(),
|
|
30702
30725
|
family: _enum(["IPv4", "IPv6"]),
|
|
30703
30726
|
address: string(),
|
|
30704
|
-
/** CIDR shorthand (e.g. `192.168.
|
|
30727
|
+
/** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
|
|
30705
30728
|
cidr: string(),
|
|
30706
30729
|
/** OS netmask. Stable across calls so the SDK can hash on it. */
|
|
30707
30730
|
netmask: string(),
|
|
@@ -30755,7 +30778,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30755
30778
|
"lan-ipv4",
|
|
30756
30779
|
"lan-ipv6",
|
|
30757
30780
|
"public",
|
|
30758
|
-
"loopback"
|
|
30781
|
+
"loopback",
|
|
30782
|
+
"app-link"
|
|
30759
30783
|
]),
|
|
30760
30784
|
/**
|
|
30761
30785
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30824,15 +30848,27 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30824
30848
|
localPort: AdvertisedLocalPortSchema
|
|
30825
30849
|
});
|
|
30826
30850
|
/**
|
|
30827
|
-
* The
|
|
30828
|
-
*
|
|
30829
|
-
*
|
|
30851
|
+
* The address flagged for notification links. `baseUrl: null` = AUTO, which
|
|
30852
|
+
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30853
|
+
* so the UI can show it either way.
|
|
30830
30854
|
*/
|
|
30831
30855
|
var NotificationEndpointSchema = object({
|
|
30832
30856
|
/** The operator's explicit choice, or null for AUTO. */
|
|
30833
30857
|
baseUrl: string().nullable(),
|
|
30834
|
-
/**
|
|
30835
|
-
|
|
30858
|
+
/**
|
|
30859
|
+
* The effective flagged address: the explicit choice, else (AUTO) the
|
|
30860
|
+
* CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
|
|
30861
|
+
* answered the public tunnel / mesh here, or null.
|
|
30862
|
+
*/
|
|
30863
|
+
resolved: string().nullable(),
|
|
30864
|
+
/**
|
|
30865
|
+
* The hub origin an app link carries as `hub=` (D709): the hub's best
|
|
30866
|
+
* public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
|
|
30867
|
+
* picked from this cap's own palette by `pickAppLinkHub`. `null` when the
|
|
30868
|
+
* hub advertises neither; the app link is then minted without `hub=`.
|
|
30869
|
+
* Absent on a pre-D709 hub.
|
|
30870
|
+
*/
|
|
30871
|
+
appLinkHub: string().nullable()
|
|
30836
30872
|
});
|
|
30837
30873
|
/**
|
|
30838
30874
|
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
@@ -30886,7 +30922,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30886
30922
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
30887
30923
|
* to avoid mixed-content blocks in the browser. The public
|
|
30888
30924
|
* tunnel always emits `https://` regardless. */
|
|
30889
|
-
scheme: _enum(["http", "https"]).optional()
|
|
30925
|
+
scheme: _enum(["http", "https"]).optional(),
|
|
30926
|
+
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30927
|
+
* an address notification links can be flagged with, not a hub
|
|
30928
|
+
* route. Default `false`: racers and rankers never see it. */
|
|
30929
|
+
includeAppLink: boolean().optional()
|
|
30890
30930
|
}), 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, {
|
|
30891
30931
|
kind: "mutation",
|
|
30892
30932
|
auth: "admin"
|
|
@@ -31147,7 +31187,7 @@ var MeshPeerSchema = object({
|
|
|
31147
31187
|
tags: array(string()).readonly(),
|
|
31148
31188
|
/** True when the peer advertises itself as an exit-node candidate. */
|
|
31149
31189
|
exitNodeOption: boolean(),
|
|
31150
|
-
/** Subnet routes the peer advertises (e.g. `["192.168.
|
|
31190
|
+
/** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
|
|
31151
31191
|
advertisedRoutes: array(string()).readonly(),
|
|
31152
31192
|
/** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
|
|
31153
31193
|
userLogin: string().nullable(),
|
|
@@ -32091,7 +32131,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
32091
32131
|
*/
|
|
32092
32132
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
32093
32133
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
32094
|
-
readOnly: boolean().optional()
|
|
32134
|
+
readOnly: boolean().optional(),
|
|
32135
|
+
/**
|
|
32136
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
32137
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
32138
|
+
* copy on the binding.
|
|
32139
|
+
*/
|
|
32140
|
+
maxCharacters: number().int().positive().optional()
|
|
32095
32141
|
})).readonly() });
|
|
32096
32142
|
var OsdOverlayPatchSchema = object({
|
|
32097
32143
|
enabled: boolean().optional(),
|
|
@@ -32142,7 +32188,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
32142
32188
|
valuePath: string().min(1).max(64),
|
|
32143
32189
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
32144
32190
|
displayUnit: string().max(16).optional(),
|
|
32145
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
32191
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32192
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
32193
|
+
valueMap: record(string(), string()).optional()
|
|
32146
32194
|
});
|
|
32147
32195
|
/**
|
|
32148
32196
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32192,18 +32240,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32192
32240
|
source: OsdSourceSchema,
|
|
32193
32241
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32194
32242
|
template: string().max(96).default("${value}"),
|
|
32195
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32196
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32197
32243
|
/**
|
|
32198
32244
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32199
32245
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32200
32246
|
*/
|
|
32201
32247
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32202
|
-
/**
|
|
32203
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32204
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32205
|
-
*/
|
|
32206
|
-
unitLabel: string().max(8).optional(),
|
|
32207
32248
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32208
32249
|
valueMap: record(string(), string()).optional(),
|
|
32209
32250
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32212,9 +32253,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32212
32253
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32213
32254
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32214
32255
|
*/
|
|
32215
|
-
conditions: NcConditionsSchema.optional()
|
|
32216
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32217
|
-
fallbackText: string().max(64).default("")
|
|
32256
|
+
conditions: NcConditionsSchema.optional()
|
|
32218
32257
|
});
|
|
32219
32258
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32220
32259
|
var OsdSlotViewSchema = object({
|
|
@@ -47891,12 +47930,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47891
47930
|
{
|
|
47892
47931
|
id: "addons",
|
|
47893
47932
|
family: "system",
|
|
47894
|
-
label: "Addons",
|
|
47895
|
-
kinds: [
|
|
47896
|
-
|
|
47897
|
-
|
|
47898
|
-
|
|
47899
|
-
|
|
47933
|
+
label: "Addons stopped",
|
|
47934
|
+
kinds: ["addon-crash-loop"]
|
|
47935
|
+
},
|
|
47936
|
+
{
|
|
47937
|
+
id: "addon-updates",
|
|
47938
|
+
family: "system",
|
|
47939
|
+
label: "Addon updates",
|
|
47940
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
47900
47941
|
},
|
|
47901
47942
|
{
|
|
47902
47943
|
id: "updates",
|
|
@@ -48056,13 +48097,15 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48056
48097
|
},
|
|
48057
48098
|
{
|
|
48058
48099
|
name: "summaryAddons",
|
|
48059
|
-
label: "Summary: addons",
|
|
48060
|
-
example: "
|
|
48061
|
-
kinds: [
|
|
48062
|
-
|
|
48063
|
-
|
|
48064
|
-
|
|
48065
|
-
|
|
48100
|
+
label: "Summary: addons stopped",
|
|
48101
|
+
example: "hub — recorder stopped after repeated crashes",
|
|
48102
|
+
kinds: ["addon-crash-loop"]
|
|
48103
|
+
},
|
|
48104
|
+
{
|
|
48105
|
+
name: "summaryAddonUpdates",
|
|
48106
|
+
label: "Summary: addon updates",
|
|
48107
|
+
example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
|
|
48108
|
+
kinds: ["addon-update-available", "addon-updated"]
|
|
48066
48109
|
},
|
|
48067
48110
|
{
|
|
48068
48111
|
name: "summaryUpdates",
|
|
@@ -48146,6 +48189,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48146
48189
|
[...RULE_BODY_ONLY],
|
|
48147
48190
|
[...RULE_TEXT],
|
|
48148
48191
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48192
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
48149
48193
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
48150
48194
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
48151
48195
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -48186,6 +48230,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
48186
48230
|
[...RULE_TEXT],
|
|
48187
48231
|
[...RULE_TEXT],
|
|
48188
48232
|
[...RULE_TEXT],
|
|
48233
|
+
[...RULE_TEXT],
|
|
48234
|
+
[...RULE_TEXT],
|
|
48189
48235
|
...STATE_SUMMARY_VARS
|
|
48190
48236
|
];
|
|
48191
48237
|
new Set([
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-alexa",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.129",
|
|
4
4
|
"description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|